在 Debian(以及所有 Linux 系统)上,readdir 是可以用来遍历目录的,但它是一次只读一个目录项的,不是“一次性遍历整个目录”。
readdir 是什么readdir 是 POSIX 标准 C 库函数(在 <dirent.h> 中),用于读取已打开目录中的目录项。
#include <dirent.h>
struct dirent *readdir(DIR *dirp);
struct dirent *NULL 表示:
errno)#include <stdio.h>
#include <dirent.h>
int main() {
DIR *dir = opendir("/etc");
if (!dir) {
perror("opendir");
return 1;
}
struct dirent *entry;
while ((entry = readdir(dir)) != NULL) {
printf("%s\n", entry->d_name);
}
closedir(dir);
return 0;
}
✅ 在 Debian 上完全可用
✅ 包括子目录名、文件名、符号链接等
. 和 .. 也会返回.
..
一般需要过滤:
if (strcmp(entry->d_name, ".") == 0 ||
strcmp(entry->d_name, "..") == 0)
continue;
readdir 不是递归的只遍历当前目录一层
要递归子目录,需要自己写递归逻辑。
readdir:非线程安全readdir_r(DIR *dirp, struct dirent *entry, struct dirent **result);
⚠️ 在新 glibc 中已不推荐使用,建议用 readdir + 单线程或加锁| 方法 | 特点 |
|---|---|
readdir |
最基础、最通用 |
scandir |
一次读取并排序 |
fts_* |
递归遍历更方便 |
nftw |
遍历整个目录树 |
find / ls |
shell 级别 |
✅ Debian 支持 readdir 遍历目录
✅ 适合 C / C++ 程序
❌ 不适合一次性拿全部文件(需循环)
如果你是想:
可以告诉我,我给你对应示例。