readdir()
是 Linux/Unix 系统中用于读取目录内容的函数,属于 POSIX 标准的一部分。下面我将详细解析其返回值含义。
#include <dirent.h>
struct dirent *readdir(DIR *dirp);
struct dirent
结构的指针,该结构包含目录中下一个目录项的信息d_ino
: 文件的 inode 号d_name
: 文件名(以 null 结尾的字符串)d_type
: 文件类型(非 POSIX 标准,但大多数现代系统支持)到达目录末尾
NULL
指针errno
不会被修改发生错误
NULL
指针errno
被设置为相应的错误代码EBADF
: 无效的目录流描述符ENOENT
: 当前目录项已被删除ENOTDIR
: 给定的路径不是目录#include <dirent.h>
#include <errno.h>
DIR *dir;
struct dirent *entry;
dir = opendir("/path/to/directory");
if (dir == NULL) {
// 处理打开目录失败的情况
perror("opendir");
return;
}
errno = 0;
while ((entry = readdir(dir)) != NULL) {
// 处理每个目录项
printf("%s\n", entry->d_name);
}
if (errno != 0) {
// 处理readdir错误
perror("readdir");
}
closedir(dir);
readdir()
不是线程安全的,考虑使用 readdir_r()
(已废弃)或 scandir()
readdir()
使用静态缓冲区,不是可重入函数d_type
字段不是 POSIX 标准,使用时需要检查 _DIRENT_HAVE_D_TYPE
宏对于新代码,可以考虑使用更现代的接口:
- scandir()
: 可以过滤和排序目录项
- getdents()
: Linux 特有的系统调用,提供更多控制
- C++17 的 std::filesystem
库(如果使用 C++)
希望这个解析对您理解和使用 readdir()
函数有所帮助。