readdir 是 POSIX 标准定义的目录读取函数,不是 Debian 专属的接口,因此在 Debian 上的“兼容性”需要从 内核、glibc、文件系统、以及系统调用层面 来理解。
下面分点说明。
readdir 本身是什么readdir() 定义在 POSIX.1-2001 / POSIX.1-2008#include <dirent.h>
opendir() 打开的目录流(DIR *)✅ 只要系统支持 POSIX,就支持 readdir
readdir 的兼容性readdir包括(但不限于):
| Debian 版本 | 状态 | 支持情况 |
|---|---|---|
| Debian 7 (Wheezy) | 旧 | ✅ |
| Debian 8 (Jessie) | 旧 | ✅ |
| Debian 9 (Stretch) | 旧 | ✅ |
| Debian 10 (Buster) | 旧 | ✅ |
| Debian 11 (Bullseye) | 稳定 | ✅ |
| Debian 12 (Bookworm) | 当前稳定 | ✅ |
| Debian Testing / Sid | 开发版 | ✅ |
结论:
在 Debian 上,从非常早期的版本到最新版本都兼容
readdir
Debian 使用 glibc 作为 C 运行库:
readdir() 由 glibc 提供getdents / getdents64 系统调用✅ 只要 glibc ≥ 2.0(Debian 2.0 以后),readdir 都可用
readdir vs readdir_r vs readdir64| 函数 | 状态 | 说明 |
|---|---|---|
readdir |
✅ 标准 | 推荐使用 |
readdir_r |
❌ 已废弃 | POSIX 已标记为 obsolete |
readdir64 |
glibc | 用于 LFS(大文件系统) |
readdir_r64 |
❌ | 已过时 |
✅ 现代 Debian + glibc 推荐只使用 readdir
readdir 在 Debian 上支持的文件系统包括:
只要内核 ≤ 支持该文件系统,就能正常 readdir
readdir 自动适配readdir64✅ 没有,完全遵循 POSIX
✅ 即使是 Debian 3.x 也支持
✅ 支持 NFS、FUSE 等
#include <dirent.h>
#include <stdio.h>
int main() {
DIR *dir = opendir(".");
if (!dir) return 1;
struct dirent *entry;
while ((entry = readdir(dir)) != NULL) {
printf("%s\n", entry->d_name);
}
closedir(dir);
return 0;
}
✅ 可在 所有 Debian 版本 编译运行
Linux 没有
readdir系统调用
实际是:
readdir (libc) → getdents / getdents64 (syscall)
readdir在 Debian 上是全版本兼容的 POSIX 接口,适用于所有主流 Debian 发行版和文件系统。
如果你有具体场景(如:老 Debian + NFS、嵌入式 Debian、交叉编译、64 位 inode 问题),可以告诉我,我可以针对性说明。