readdir
函數是用于讀取目錄內容的 POSIX 標準函數。它的原型通常在 <dirent.h>
頭文件中定義,如下所示:
#include <dirent.h>
struct dirent *readdir(DIR *dirp);
readdir
函數只有一個參數:
DIR *dirp
:這是一個指向 DIR
類型的指針,表示要讀取的目錄流。在使用 readdir
函數之前,通常需要使用 opendir
函數打開一個目錄,并返回一個 DIR
指針。readdir
函數返回一個指向 struct dirent
結構的指針,該結構包含有關目錄中的一個條目的信息。如果到達目錄的末尾或發生錯誤,則返回 NULL
。
struct dirent
結構通常包含以下字段:
long d_ino;
:目錄項的 inode 號。off_t d_off;
:目錄項在目錄文件中的偏移量。unsigned short d_reclen;
:目錄項的長度。char d_name[];
:目錄項的名稱。請注意,d_name
字段是一個可變長度數組,其大小足以容納目錄項的名稱加上一個空字符終止符。
使用 readdir
函數時,通常會在一個循環中調用它,直到它返回 NULL
,表示已經讀取了目錄中的所有條目。例如:
#include <stdio.h>
#include <stdlib.h>
#include <dirent.h>
int main() {
DIR *dir;
struct dirent *entry;
dir = opendir(".");
if (dir == NULL) {
perror("opendir");
exit(EXIT_FAILURE);
}
while ((entry = readdir(dir)) != NULL) {
printf("%s\n", entry->d_name);
}
closedir(dir);
return 0;
}
在這個例子中,程序打開當前目錄(.
),然后循環讀取每個目錄項,并打印其名稱。最后,使用 closedir
函數關閉目錄流。