readdir() 是一個(gè)在 c 語(yǔ)言中用于讀取目錄內(nèi)容的函數(shù),它的原型定義在
如果成功,readdir() 返回一個(gè)指向 Struct dirent 的指針;如果到達(dá)目錄流的末尾,則返回 NULL。如果在讀取過(guò)程中發(fā)生錯(cuò)誤,則返回 NULL,并設(shè)置全局變量 errno 來(lái)指示錯(cuò)誤類型。
struct dirent 結(jié)構(gòu)通常包含以下成員:
- d_ino: 目錄項(xiàng)的 inode 號(hào)。
- d_off: 目錄項(xiàng)在目錄文件中的偏移量。
- d_reclen: d_name 字段的字節(jié)長(zhǎng)度。
- d_name: 指向目錄項(xiàng)名稱的以 null 結(jié)尾的字符數(shù)組。
d_name 字段是目錄項(xiàng)的名字,它是 readdir() 返回的結(jié)構(gòu)中唯一保證有效的字段。如果目錄項(xiàng)沒(méi)有名字(例如,. 或 ..),則 d_name 為空字符串。
下面是一個(gè)簡(jiǎn)單的例子,展示了如何使用 readdir() 函數(shù)來(lái)遍歷一個(gè)目錄中的所有條目:
#<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; }
在這個(gè)例子中,程序接受一個(gè)命令行參數(shù)作為要讀取的目錄名。它使用 opendir() 打開(kāi)目錄,然后循環(huán)調(diào)用 readdir() 來(lái)獲取每個(gè)目錄項(xiàng)。對(duì)于每個(gè)目錄項(xiàng),它打印出 d_name 字段的值,即目錄項(xiàng)的名字。最后,它使用 closedir() 關(guān)閉目錄流。如果在任何時(shí)候發(fā)生錯(cuò)誤,程序會(huì)打印出錯(cuò)誤信息并返回非零值。