在 Debian(以及一般 Linux 系统)中,readdir 通常指 C 标准库 / POSIX 中的目录读取函数,如:
readdir()readdir_r()(已不推荐)readdir64()(大文件系统)scandir()(基于 readdir 封装)它在 Debian 上适用的场景可以从开发、系统管理、运维工具几个层面来看。
当你需要读取某个目录下的所有文件和子目录时:
DIR *dir = opendir("/var/log");
struct dirent *entry;
while ((entry = readdir(dir)) != NULL) {
printf("%s\n", entry->d_name);
}
closedir(dir);
✅ 适用:
适合开发:
rm -r / cp -r 类似工具因为 readdir 能区分:
entry->d_type == DT_DIR
在 Debian 服务器上常用于:
/tmp、/var/www例如:
很多 Debian 服务内部会调用 readdir:
cron 扫描 /etc/cron.dsystemd 读取 unit 目录在系统启动阶段读取目录:
/etc/rc*.d/etc/modules-load.d/lib/systemd/system| 场景 | 是否推荐 | 原因 |
|---|---|---|
| 只找某一种文件 | ❌ | 用 glob / find 更高效 |
| 需要正则匹配 | ❌ | readdir 不提供过滤 |
| 大量递归目录 | ⚠️ | 需自己处理递归 |
| Shell 脚本 | ❌ | 用 ls / find 更简单 |
| 实时监听文件变化 | ❌ | 应使用 inotify |
在 Debian 64 位系统:
readdir 实际常映射到 readdir64在 Debian 上常见:
⚠️ 注意:
entry->d_type == DT_UNKNOWN
在某些文件系统上是正常的
Debian 上 readdir 适用场景一句话总结:
当你在 C / C++ 程序中需要底层、可控、逐条读取目录项时,
readdir是最标准、最可靠的选择。
如果你愿意,我也可以:
readdir vs opendir + scandir你想看哪一块?