在 Debian(以及所有 Linux/Unix 系统) 中,readdir 是 POSIX 标准 C 库函数,用于读取目录内容。它的返回值和含义遵循 POSIX 规范,与 Debian 本身没有直接差异。
下面按 最常用情况 说明。
readdir 函数原型#include <dirent.h>
struct dirent *readdir(DIR *dirp);
struct dirent 的指针struct dirent {
ino_t d_ino; // inode 号
off_t d_off; // 偏移量(非 POSIX)
unsigned short d_reclen; // 记录长度
unsigned char d_type; // 文件类型(非 POSIX,多数 Linux 支持)
char d_name[256]; // 文件名
};
NULLif (readdir(dir) == NULL) {
// 目录读取结束
}
NULL常见错误码:
EBADF:目录流无效ENOENT:目录不存在判断方式:
errno = 0;
struct dirent *entry = readdir(dir);
if (entry == NULL) {
if (errno != 0) {
perror("readdir");
} else {
// 正常结束
}
}
#include <stdio.h>
#include <dirent.h>
#include <errno.h>
int main() {
DIR *dir = opendir(".");
if (!dir) {
perror("opendir");
return 1;
}
errno = 0;
struct dirent *entry;
while ((entry = readdir(dir)) != NULL) {
printf("%s\n", entry->d_name);
}
if (errno != 0) {
perror("readdir");
}
closedir(dir);
return 0;
}
readdir 不是线程安全的readdir_r(已废弃)或 readdir + 锁. 和 ...
..
file1
file2
如果你不想看到它们,应手动过滤:
if (strcmp(entry->d_name, ".") == 0 ||
strcmp(entry->d_name, "..") == 0)
continue;
readdir vs getdents| 函数 | 说明 |
|---|---|
readdir |
POSIX 标准,用户态接口 |
getdents |
Linux 系统调用(底层) |
readdir |
Debian / Linux 实际使用 getdents 实现 |
如果你需要的是:
readdir 在 Debian 特定版本的差异readdir 与 readdir64d_type 在 Debian 上的可用性可以继续问,我可以针对你的具体场景深入分析。