readdir
和 opendir
是在 C 語言中用于讀取目錄內容的兩個函數,它們通常與 POSIX 標準一起使用,并且在許多 Unix-like 系統(包括 Debian)中可用。這兩個函數的主要區別在于它們的用途和用法。
opendir
函數:
opendir
函數用于打開一個目錄流,它返回一個指向 DIR
類型的指針,該指針用于后續的目錄操作。如果你想要讀取一個目錄的內容,你首先需要使用 opendir
來打開它。函數原型如下:
DIR *opendir(const char *name);
參數 name
是你想要打開的目錄的路徑。如果成功,opendir
返回一個指向新打開目錄流的指針;如果失敗,則返回 NULL
。
readdir
函數:
readdir
函數用于從已經打開的目錄流中讀取下一個目錄項。每次調用 readdir
都會返回一個指向 struct dirent
結構的指針,該結構包含了目錄項的信息,如文件名、inode 號等。函數原型如下:
struct dirent *readdir(DIR *dirp);
參數 dirp
是由 opendir
函數返回的目錄流指針。如果成功,readdir
返回一個指向 struct dirent
的指針,該結構包含了下一個目錄項的信息;如果在目錄流的末尾或者發生錯誤,則返回 NULL
。
使用這兩個函數的基本步驟如下:
opendir
打開目錄。opendir
的返回值是否為 NULL
,以確保目錄成功打開。readdir
來讀取目錄中的每個條目,直到 readdir
返回 NULL
。closedir
函數。示例代碼:
#include <dirent.h>
#include <stdio.h>
int main() {
DIR *dir;
struct dirent *entry;
dir = opendir("/path/to/directory");
if (dir == NULL) {
perror("opendir");
return EXIT_FAILURE;
}
while ((entry = readdir(dir)) != NULL) {
printf("%s\n", entry->d_name);
}
closedir(dir);
return EXIT_SUCCESS;
}
在這個示例中,程序打開指定路徑的目錄,然后讀取并打印出目錄中的所有文件和子目錄的名稱。最后,它關閉目錄流。