温馨提示×

centos readdir是什么

小樊
44
2026-08-19 06:56:04
栏目: 智能运维

centos readdir” 并不是 CentOS 独有的概念,而是 Linux 系统中用于读取目录内容的一个系统调用 / 函数接口。下面分几个层次给你解释清楚。


一、readdir 是什么?

readdirC 语言标准库和 Linux 系统编程中用于读取目录内容的函数,作用是:

从目录流中读取下一个目录项(文件 / 子目录)

它通常出现在 POSIX 标准 中,CentOS、Ubuntu、Debian 等 Linux 发行版都支持。


二、readdir 在 Linux 中的来源

1️⃣ 系统调用层面(内核)

  • 真正的内核接口是:
    getdents()
    getdents64()
    
  • 普通程序一般不直接用这些系统调用

2️⃣ glibc 封装(用户态常用)

  • readdir() 是 glibc 对 getdents() 的封装
  • 定义在头文件:
    #include <dirent.h>
    

三、readdir 的基本用法

示例:列出目录中的所有文件

#include <stdio.h>
#include <dirent.h>

int main() {
    DIR *dir = opendir(".");
    struct dirent *entry;

    while ((entry = readdir(dir)) != NULL) {
        printf("%s\n", entry->d_name);
    }

    closedir(dir);
    return 0;
}

执行流程

  1. opendir() → 打开目录
  2. readdir() → 逐个读取目录项
  3. closedir() → 关闭目录

四、readdir 返回的结构体

struct dirent {
    ino_t          d_ino;       // inode 号
    off_t          d_off;
    unsigned short d_reclen;
    unsigned char  d_type;      // 文件类型
    char           d_name[256]; // 文件名
};

常见 d_type

含义
DT_REG 普通文件
DT_DIR 目录
DT_LNK 符号链接

五、CentOS 中的 readdir

CentOS 中:

  • readdir 来自 glibc
  • 与 CentOS 版本无关(7 / 8 / Stream 都支持)
  • 常用于:
    • 系统编程
    • 文件扫描工具
    • 自定义 ls 命令
    • 备份 / 监控程序

查看 man 手册:

man readdir

或:

man 3 readdir

六、常见问题

readdirls 有关吗?

✅ 有
ls 命令底层就是使用 opendir + readdir 读取目录内容。


readdir 会返回 ... 吗?

✅ 会
需要手动过滤:

if (strcmp(entry->d_name, ".") == 0 ||
    strcmp(entry->d_name, "..") == 0)
    continue;

readdir 是线程安全的吗?

❌ 不是
多线程中应使用:

readdir_r()   // 已废弃

或加锁保护。


七、总结一句话

readdir 是 Linux(包括 CentOS)中用于读取目录内容的函数,常用于 C 语言系统编程,用来遍历目录中的文件和子目录。

如果你是想:

  • ✅ 写 C 程序
  • ✅ 查某个命令为什么用 readdir
  • ✅ 排查目录读取问题

可以直接告诉我你的具体场景。

0