opendir
和 readdir
是在 C 语言中用于遍历目录内容的两个函数,它们通常一起使用。下面是这两个函数的基本关系和功能:
opendir:
DIR *opendir(const char *name);
DIR
结构的指针,该结构用于后续操作。如果无法打开目录,则返回 NULL
。readdir
之前,必须先调用 opendir
来获取一个有效的目录流。readdir:
struct dirent *readdir(DIR *dirp);
DIR
结构(通常由 opendir
返回)指向的目录流中读取下一个目录项。如果成功,返回一个指向 dirent
结构的指针,该结构包含有关目录项的信息;如果到达目录流的末尾,则返回 NULL
。opendir
后,可以使用 readdir
来逐个获取目录中的文件和子目录。这两个函数通常结合使用来遍历一个目录中的所有条目。下面是一个简单的示例代码,演示如何使用 opendir
和 readdir
来列出目录中的所有文件和子目录:
#include <stdio.h>
#include <stdlib.h>
#include <dirent.h>
int main() {
DIR *dir;
struct dirent *entry;
// 打开当前目录
dir = opendir(".");
if (dir == NULL) {
perror("opendir");
return EXIT_FAILURE;
}
// 读取目录中的每个条目
while ((entry = readdir(dir)) != NULL) {
printf("%s\n", entry->d_name);
}
// 关闭目录流
closedir(dir);
return EXIT_SUCCESS;
}
在这个例子中,程序打开当前目录(用 "."
表示),然后循环调用 readdir
来获取每个目录项的名称并打印出来,最后关闭目录流。