readdir() 是一個在 c 語言中用于讀取目錄內(nèi)容的函數(shù),它的原型定義在
如果成功,readdir() 返回一個指向 struct dirent 的指針;如果到達目錄流的末尾,則返回 NULL。如果在讀取過程中發(fā)生錯誤,則返回 NULL,并設(shè)置全局變量 errno 來指示錯誤類型。
Struct dirent 結(jié)構(gòu)通常包含以下成員:
- d_ino: 目錄項的 inode 號。
- d_off: 目錄項在目錄文件中的偏移量。
- d_reclen: d_name 字段的字節(jié)長度。
- d_name: 指向目錄項名稱的以 null 結(jié)尾的字符數(shù)組。
d_name 字段是目錄項的名字,它是 readdir() 返回的結(jié)構(gòu)中唯一保證有效的字段。如果目錄項沒有名字(例如,. 或 ..),則 d_name 為空字符串。
下面是一個簡單的例子,展示了如何使用 readdir() 函數(shù)來遍歷一個目錄中的所有條目:
#<span>include <stdio.h></span> #<span>include <stdlib.h></span> #<span>include <dirent.h></span> #<span>include <errno.h></span> int main(<span>int argc, char *argv[])</span> { DIR *dir; <span>struct dirent *entry;</span> if (argc != 2) { fprintf(stderr, "Usage: %s <directory> ", argv[0]); return EXIT_FAILURE; } dir = opendir(argv[1]); if (dir == NULL) { perror("opendir"); return EXIT_FAILURE; } while ((entry = readdir(dir)) != NULL) { printf("%s ", entry->d_name); } if (closedir(dir) == -1) { perror("closedir"); return EXIT_FAILURE; } return EXIT_SUCCESS; }
在這個例子中,程序接受一個命令行參數(shù)作為要讀取的目錄名。它使用 opendir() 打開目錄,然后循環(huán)調(diào)用 readdir() 來獲取每個目錄項。對于每個目錄項,它打印出 d_name 字段的值,即目錄項的名字。最后,它使用 closedir() 關(guān)閉目錄流。如果在任何時候發(fā)生錯誤,程序會打印出錯誤信息并返回非零值。