在 Debian(以及一般 Linux)环境下,readdir() 是读取目录内容的底层系统调用接口(常见于 C 语言)。如果你的场景是不想用 readdir(),可以根据使用语言和目的选择以下替代方案:
readdir()getdents() / getdents64()readdir() 本质上是对 getdents64() 的封装。
#include <sys/syscall.h>
#include <unistd.h>
#include <linux/dirent.h>
syscall(SYS_getdents64, fd, buf, size);
✅ 更底层、性能更高
❌ 可移植性差(非 POSIX)
scandir()比 readdir() 更方便,支持过滤和排序。
struct dirent **namelist;
int n = scandir(".", &namelist, NULL, alphasort);
✅ 自动排序
✅ 代码更简洁
❌ 会一次性加载所有目录项
opendir + readdir_r(线程安全版)readdir() 不是线程安全的,可用:
readdir_r(dirp, entry, &result);
✅ 线程安全
❌ 已逐步被弃用(glibc 推荐 readdir)
lsls -1 /path
findfind /path -maxdepth 1
stat + printffor f in /path/*; do
echo "$f"
done
import os
os.listdir("/path")
# 或
os.scandir("/path")
entries, _ := os.ReadDir("/path")
std::fs::read_dir("/path")
如果目的是“检测目录变化”而不是遍历:
inotifywait -m /path
某些伪目录(如 /proc)不适合 readdir,直接读文件更稳妥。
readdir()?getdents64 或 scandir)readdir_r)如果你能说明:
我可以给你更精确的替代方案。