readdir()
是一个在 C 语言中用于读取目录内容的函数,它的原型定义在 <dirent.h>
头文件中。当你调用 readdir()
函数时,它会返回一个指向 struct dirent
结构的指针,该结构包含了关于目录中的一个条目的信息。
如果成功,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()
函数来遍历一个目录中的所有条目:
#include <stdio.h>
#include <stdlib.h>
#include <dirent.h>
#include <errno.h>
int main(int argc, char *argv[]) {
DIR *dir;
struct dirent *entry;
if (argc != 2) {
fprintf(stderr, "Usage: %s <directory>\n", argv[0]);
return EXIT_FAILURE;
}
dir = opendir(argv[1]);
if (dir == NULL) {
perror("opendir");
return EXIT_FAILURE;
}
while ((entry = readdir(dir)) != NULL) {
printf("%s\n", entry->d_name);
}
if (closedir(dir) == -1) {
perror("closedir");
return EXIT_FAILURE;
}
return EXIT_SUCCESS;
}
在这个例子中,程序接受一个命令行参数作为要读取的目录名。它使用 opendir()
打开目录,然后循环调用 readdir()
来获取每个目录项。对于每个目录项,它打印出 d_name
字段的值,即目录项的名字。最后,它使用 closedir()
关闭目录流。如果在任何时候发生错误,程序会打印出错误信息并返回非零值。