温馨提示×

Debian readdir是系统调用吗

小樊
39
2026-06-30 21:13:26
栏目: 智能运维

简短回答:readdir 在 Debian(以及大多数 Linux 系统)上不是系统调用,而是一个 C 库函数。

下面分层次说明一下,避免混淆:


1️⃣ readdir 是什么?

readdirPOSIX 标准定义的用户态接口,用于读取目录内容。

#include <dirent.h>

struct dirent *readdir(DIR *dirp);

它来自 glibc,不是 Linux 内核提供的系统调用。


2️⃣ 真正的系统调用是什么?

在 Linux 中,真正的内核系统调用是:

  • getdents
  • getdents64

readdir 内部通常会调用 getdents64(取决于 glibc 实现)。

你可以用 strace 验证:

strace ls

你会看到类似:

getdents64(...)

而不是 readdir


3️⃣ 为什么 readdir 不是系统调用?

原因有几个:

  • 系统调用数量有限,内核不会为每个高级操作都提供系统调用
  • readdir 需要维护状态(如目录流 DIR *),而系统调用是“无状态”的
  • glibc 负责:
    • 打开目录 (opendir)
    • 缓冲目录数据
    • 多次调用 getdents
    • 返回 struct dirent

4️⃣ Debian 中是否有特殊情况?

没有。

无论是 Debian、Ubuntu、CentOS 还是 Arch:

  • readdir 始终是 glibc 提供的库函数
  • 内核仍然是 getdents / getdents64

5️⃣ 一句话总结

readdir = 用户态函数
getdents / getdents64 = 系统调用

如果你愿意,我也可以:

  • 画一张 readdir → getdents → 内核 的调用流程图
  • 或对比 readdir vs readdir_r vs getdents 的用法和安全性

0