在 Ubuntu(以及一般的 Linux 系统)中,readdir 不是系统调用,而是一个 C 库函数(glibc 封装函数)。
具体说明如下:
readdir 是什么readdir 定义在 <dirent.h> 中struct dirent *readdir(DIR *dirp);
DIR*)中的下一个目录项底层的目录读取依赖的是系统调用,例如:
getdentsgetdents64这些才是 Linux 的 系统调用。
关系大致是:
用户程序
→ readdir() (glibc 函数)
→ getdents64() (系统调用)
你可以用以下方式确认:
man 3 readdir # 第 3 节:库函数
man 2 getdents # 第 2 节:系统调用
strace 一个使用 readdir 的程序:strace ./your_program
你会看到 getdents64 而不是 readdirreaddir:库函数(不是系统调用)getdents / getdents64:系统调用readdir 是对系统调用的封装如果你愿意,我也可以帮你画一张“目录读取调用链”的示意图,或者对比 readdir / readdir_r / getdents 的区别。