在 Linux 中,readdir 通常指 POSIX 标准库函数 readdir(),用于读取目录内容。
readdir() 函数原型#include <dirent.h>
struct dirent *readdir(DIR *dirp);
struct dirent 的指针NULLerrnoNULLerrno⚠️ 因此判断是否到目录末尾,应:
errno = 0;
while ((entry = readdir(dir)) != NULL) {
// 处理 entry
}
if (errno != 0) {
perror("readdir");
}
struct dirent 结构(常见字段)struct dirent {
ino_t d_ino; // inode 号
off_t d_off; // 偏移量(非 POSIX 标准)
unsigned short d_reclen; // 记录长度
unsigned char d_type; // 文件类型(Linux 扩展)
char d_name[]; // 文件名(以 '\0' 结尾)
};
d_type 值| 值 | 含义 |
|---|---|
| DT_REG | 普通文件 |
| DT_DIR | 目录 |
| DT_LNK | 符号链接 |
| DT_UNKNOWN | 未知 |
DIR *dir = opendir(".");
struct dirent *entry;
while ((entry = readdir(dir)) != NULL) {
printf("%s\n", entry->d_name);
}
closedir(dir);
readdir() 不是线程安全readdir_r()(已不推荐)readdir() + 单线程或加锁如果你问的是:
getdents / getdents64os.readdirreaddir可以告诉我,我可以进一步解释。