在 Debian(以及大多数 Linux 发行版)里,其实是“有”opendir 的,只是它不在你自己写的代码默认能直接用的“裸系统调用”层面,而是在 C 库(glibc)里。
下面把容易混淆的点说清楚:
opendir 不是系统调用,而是 glibc 函数opendir 是 POSIX 标准函数open + getdentsopenat + getdents64所以:
#include <dirent.h>
DIR *dir = opendir(".");
在 Debian 上完全可用,前提是:
opendir”常见原因有几种:
比如:
这些地方:
dirent.hopendir内核里用的是
filp_open()/vfs_readdir()那一套
#include <dirent.h> // 必须
少了这个,编译器会报:
implicit declaration of function 'opendir'
例如:
opendiropendir这是正常的:
系统调用表里本来就没有
opendir
opendir在 Debian 上执行:
man 3 opendir
你会看到:
OPENDIR(3) — Linux Programmer's Manual
再查来源:
dpkg -S opendir
通常来自:
libc6-dev
Debian 有
opendir,但它属于 glibc / POSIX API,不是 Linux 系统调用。
如果你是在某个特定环境(比如内核、某个语言、某个构建系统)里“找不到”,可以告诉我:
我可以直接帮你定位问题。