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 是相对于打开的目录的路径名,因此它可能不是绝对路径。