readdir
函数是用于读取目录内容的 POSIX 函数。它在
头文件中定义。readdir
函数通常用于遍历一个目录中的所有条目(文件和子目录)。
函数原型
#includestruct 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#include #include #include 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
是相对于打开的目录的路径名,因此它可能不是绝对路径。