readdir
和 opendir
是在編程中用于處理目錄的兩個函數,它們通常在 C 語言中使用,并且在 POSIX 標準中有定義。這兩個函數都是用于遍歷目錄中的文件和子目錄的,但它們的作用和使用方式有所不同。
opendir
函數:
opendir
函數用于打開一個目錄流,它返回一個指向 DIR
類型的指針,該指針用于后續的目錄操作。如果無法打開指定的目錄,opendir
將返回 NULL
。函數原型:
#include <dirent.h>
DIR *opendir(const char *name);
參數:
name
:要打開的目錄的路徑。返回值:
DIR
結構的指針。NULL
。readdir
函數:
readdir
函數用于讀取由 opendir
打開的目錄流中的下一個目錄項。每次調用 readdir
都會返回一個指向 struct dirent
結構的指針,該結構包含了目錄項的信息,如文件名、文件類型等。當沒有更多的目錄項可以讀取時,readdir
返回 NULL
。函數原型:
#include <dirent.h>
struct dirent *readdir(DIR *dirp);
參數:
dirp
:由 opendir
函數返回的 DIR
類型的指針。返回值:
struct dirent
結構的指針,該結構包含了目錄項的信息。NULL
。使用這兩個函數的基本步驟如下:
opendir
打開目錄。opendir
的返回值是否為 NULL
,以確保目錄成功打開。readdir
讀取目錄中的每個條目,直到 readdir
返回 NULL
。readdir
返回的非 NULL
指針,處理目錄項信息。closedir
函數。示例代碼:
#include <stdio.h>
#include <dirent.h>
int main() {
DIR *dir;
struct dirent *entry;
dir = opendir(".");
if (dir == NULL) {
perror("opendir");
return EXIT_FAILURE;
}
while ((entry = readdir(dir)) != NULL) {
printf("%s\n", entry->d_name);
}
closedir(dir);
return EXIT_SUCCESS;
}
在這個示例中,程序打開當前目錄(.
),然后讀取并打印出所有目錄項的名稱,最后關閉目錄流。