温馨提示×

ubuntu readdir是系统调用吗

小樊
45
2026-10-06 14:21:39
栏目: 智能运维

在 Ubuntu(以及一般的 Linux 系统)中,readdir 不是系统调用,而是一个 C 库函数(glibc 封装函数)。

具体说明如下:

1. readdir 是什么

  • readdir 定义在 <dirent.h> 中
  • 原型通常是:
    struct dirent *readdir(DIR *dirp);
    
  • 它是 用户态函数,由 glibc 提供
  • 用于读取一个目录流(DIR*)中的下一个目录项

2. 真正的系统调用是什么

底层的目录读取依赖的是系统调用,例如:

  • getdents
  • getdents64

这些才是 Linux 的 系统调用。

关系大致是:

用户程序
  → readdir()        (glibc 函数)
      → getdents64() (系统调用)

3. 如何验证

你可以用以下方式确认:

  • 查看手册:
    man 3 readdir   # 第 3 节:库函数
    man 2 getdents  # 第 2 节:系统调用
    
  • strace 一个使用 readdir 的程序:
    strace ./your_program
    
    你会看到 getdents64 而不是 readdir

4. 小结

  • ✅ readdir:库函数(不是系统调用)
  • ✅ getdents / getdents64:系统调用
  • Ubuntu 上两者都存在,且 readdir 是对系统调用的封装

如果你愿意,我也可以帮你画一张“目录读取调用链”的示意图,或者对比 readdir / readdir_r / getdents 的区别。

0 踩