在 CentOS 系統中,readdir
函數用于讀取目錄中的文件和子目錄
readdir
函數的原型如下:
struct dirent *readdir(DIR *dirp);
其中,DIR
是一個指向 DIR
結構的指針,該結構表示一個已打開的目錄流。readdir
函數返回一個指向 dirent
結構的指針,該結構包含有關目錄項的信息,如文件名、文件類型等。當讀取到目錄末尾時,readdir
函數返回 NULL。
關于內存管理,readdir
函數本身不會分配或釋放內存。它只是返回一個指向現有目錄項信息的指針。然而,在使用 readdir
函數時,需要注意以下幾點以避免內存泄漏和其他問題:
不要修改 dirent
結構中的任何字段,因為它們是由系統分配和管理的。
如果需要復制目錄項信息,可以使用 strdup
函數(需要包含 <string.h>
頭文件)來分配足夠的內存并復制字符串。使用完畢后,記得使用 free
函數釋放分配的內存。
當不再需要目錄流時,使用 closedir
函數關閉目錄流以釋放相關資源。
下面是一個簡單的示例,展示了如何使用 readdir
函數讀取目錄中的文件和子目錄:
#include <stdio.h>
#include <stdlib.h>
#include <dirent.h>
#include <string.h>
int main() {
DIR *dirp;
struct dirent *entry;
dirp = opendir(".");
if (dirp == NULL) {
perror("opendir");
exit(EXIT_FAILURE);
}
while ((entry = readdir(dirp)) != NULL) {
printf("%s\n", entry->d_name);
}
closedir(dirp);
return 0;
}
在這個示例中,我們打開了當前目錄(.
),然后使用 readdir
函數逐個讀取目錄項,并將文件名打印到屏幕上。最后,我們使用 closedir
函數關閉目錄流。