在 CentOS(以及其它 Linux 发行版) 中,readdir 并不是在某个具体的“源码文件”里“定义”成一个普通函数,而是 POSIX 标准定义的库函数接口,实现位于 C 库(glibc) 中。
下面分几层说明:
readdir 在哪里“声明”头文件:
#include <dirent.h>
在 CentOS 上,声明位置通常是:
/usr/include/dirent.h
可用命令查看:
grep readdir /usr/include/dirent.h
readdir 在哪里“实现”CentOS 使用 glibc,源码在:
glibc/posix/readdir.c
glibc/dirent/ (多个 readdir 变体)
不同版本有:
readdirreaddir_rreaddir64readdir64_r示例(glibc 简化逻辑):
struct dirent *
readdir(DIR *dirp)
{
...
return readdir64(dirp);
}
readdir 是 库函数,不是系统调用。
底层系统调用是:
getdentsgetdents64查看系统调用:
man 2 getdents
CentOS 内核实现(源码):
fs/readdir.c
# 查看 readdir 来自哪个库
ldd your_program
nm -D /lib64/libc.so.6 | grep readdir
CentOS 中
readdir在<dirent.h>声明,由 glibc 实现,底层通过getdents64系统调用读取目录。
如果你是想:
可以告诉我,我可以给你具体源码路径或示例。