readdir
函数是用于读取目录内容的 POSIX 函数。它在 <dirent.h>
头文件中定义。readdir
函数通常用于遍历一个目录中的所有条目(文件和子目录)。
#include <dirent.h>
struct dirent *readdir(DIR *dirp);
DIR *dirp
:指向一个已打开的目录流的指针。这个目录流通常是通过调用 opendir
函数获得的。readdir
返回一个指向 struct dirent
的指针,该结构包含目录中的一个条目的信息。NULL
。NULL
,并且可以通过 errno
获取错误信息。struct dirent
结构struct dirent
结构通常包含以下字段:
ino_t d_ino
:条目的 inode 号。off_t d_off
:偏移量(在某些系统上可能不使用)。unsigned short d_reclen
:整个 d_name
字段的长度。unsigned char d_type
:条目的类型(例如 DT_REG 表示常规文件,DT_DIR 表示目录)。char d_name[]
:以 null 结尾的条目名称。以下是一个简单的示例,展示如何使用 readdir
函数遍历当前目录中的所有文件和子目录:
#include <stdio.h>
#include <stdlib.h>
#include <dirent.h>
#include <errno.h>
int main() {
DIR *dir;
struct dirent *entry;
// 打开当前目录
dir = opendir(".");
if (dir == NULL) {
perror("opendir");
exit(EXIT_FAILURE);
}
// 遍历目录中的每个条目
while ((entry = readdir(dir)) != NULL) {
printf("%s\n", entry->d_name);
}
// 关闭目录流
if (closedir(dir) == -1) {
perror("closedir");
exit(EXIT_FAILURE);
}
return 0;
}
readdir
时需要处理可能的错误情况,比如 opendir
失败或 readdir
返回 NULL
。closedir
关闭它,以释放相关资源。readdir
返回的 d_name
是相对于打开的目录的路径名,因此它可能不是绝对路径。