在 Debian(以及一般的 Linux/glibc 系统)里,opendir 并不是在某一个“固定文件”里定义的源码,而是由 C 库(glibc)提供 的,属于 POSIX 标准函数。
下面分层说明“在哪儿定义”:
opendir 的函数原型声明在:
#include <dirent.h>
在 Debian 上,这个头文件通常在:
/usr/include/dirent.h
里面会有类似:
DIR *opendir(const char *name);
opendir 的实现在 glibc 中,不是在内核里。
glibc 源码位置(如果你装了源码):
glibc/sysdeps/posix/opendir.c
或平台相关目录,例如:
glibc/sysdeps/unix/sysv/linux/opendir.c
在 Debian 上,你通常不会直接看到源码,而是看到:
/usr/include/dirent.h/lib/x86_64-linux-gnu/libc.so.6opendir 不是系统调用,它内部会调用:
open()(系统调用)getdents64()(系统调用)简化流程:
opendir()
└─ open()
└─ 分配 DIR 结构
└─ readdir() 时调用 getdents64()
man 3 opendir
grep opendir /usr/include/dirent.h
nm -D /lib/x86_64-linux-gnu/libc.so.6 | grep opendir
opendir在<dirent.h>中声明,由 glibc 实现,最终通过 Linux 系统调用访问目录,不是内核直接提供的函数。
如果你是想:
可以告诉我,我可以直接贴代码或路径。