readdir() 是一个在 c 语言中用于读取目录内容的函数,它的原型定义在
如果成功,readdir() 返回一个指向 Struct dirent 的指针;如果到达目录流的末尾,则返回 NULL。如果在读取过程中发生错误,则返回 NULL,并设置全局变量 errno 来指示错误类型。
struct dirent 结构通常包含以下成员:
- d_ino: 目录项的 inode 号。
- d_off: 目录项在目录文件中的偏移量。
- d_reclen: d_name 字段的字节长度。
- d_name: 指向目录项名称的以 null 结尾的字符数组。
d_name 字段是目录项的名字,它是 readdir() 返回的结构中唯一保证有效的字段。如果目录项没有名字(例如,. 或 ..),则 d_name 为空字符串。
下面是一个简单的例子,展示了如何使用 readdir() 函数来遍历一个目录中的所有条目:
#<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; }
在这个例子中,程序接受一个命令行参数作为要读取的目录名。它使用 opendir() 打开目录,然后循环调用 readdir() 来获取每个目录项。对于每个目录项,它打印出 d_name 字段的值,即目录项的名字。最后,它使用 closedir() 关闭目录流。如果在任何时候发生错误,程序会打印出错误信息并返回非零值。