在 Ubuntu(以及其它 Linux 系统)里,opendir 并不是在某一个你平时写的源码里“定义”的,而是由 C 标准库(glibc) 提供的一个函数。
下面分层说明它在哪里“定义”:
opendir 的声明在:
#include <dirent.h>
在 Ubuntu 上,这个头文件通常位于:
/usr/include/dirent.h
你可以用以下命令查看:
ls /usr/include/dirent.h
opendir 的实现在 glibc(GNU C Library) 中,而不是内核里。
在 glibc 源码中,大致位于:
sysdeps/posix/opendir.c
或者不同平台相关的实现目录下。
如果你在 Ubuntu 上:
/lib/x86_64-linux-gnu/libc.so.6
opendir 本身是一个 库函数,不是系统调用。
它内部通常会调用:
open()
getdents64() // 或旧版 getdents
这些是真正的 Linux 系统调用。
简单关系:
你的程序
↓
opendir() (glibc)
↓
open() / getdents64() (Linux kernel)
man opendir
你会看到:
opendir - open a directory
<link to dirent.h>
nm -D /lib/x86_64-linux-gnu/libc.so.6 | grep opendir
opendir在<dirent.h>中声明,在 glibc 中实现,最终通过 Linux 系统调用访问目录。
如果你是想:
opendir可以告诉我你的具体目的,我可以进一步展开。