温馨提示×

centos readdir是干嘛的

小樊
44
2026-08-19 07:16:55
栏目: 智能运维

CentOS(以及所有 Linux 系统)里,readdir 不是一条命令,而是一个 系统调用 / C 语言函数,用来 读取目录内容


一、readdir 是干什么的?

作用一句话:

读取一个目录里的文件或子目录项(类似 ls 背后做的事)。


二、readdir 是哪里来的?

它是一个 POSIX 标准 API,定义在:

#include <dirent.h>

函数原型:

struct dirent *readdir(DIR *dirp);

三、readdir 常见使用场景

1️⃣ 在 C 程序里遍历目录

这是最常见用法。

示例:列出当前目录中所有文件名

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

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

    if (dir == NULL) {
        perror("opendir");
        return 1;
    }

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

    closedir(dir);
    return 0;
}

编译运行:

gcc test.c -o test
./test

输出类似:

.
..
file1.txt
dir1

四、readdir 返回什么?

readdir() 返回一个指向 struct dirent 的指针。

常用成员:

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

注意:

  • readdir() 不会返回完整路径
  • 每次调用返回 一个目录项
  • 返回 NULL 表示目录读完

五、readdir 和 ls 的关系

你在终端执行的:

ls

背后大致流程是:

opendir("/path")
readdir()
readdir()
readdir()
...
closedir()

所以: ✅ ls 的核心就是 readdir


六、readdir 和 shell 命令的区别

项目 readdir ls
类型 C 函数 / 系统调用 shell 命令
使用方式 写程序 终端直接执行
是否返回完整路径 默认否
是否能排序

七、常见误区

在 shell 里直接执行 readdir

readdir   # ❌ 不存在这个命令

✅ 正确方式:

  • 写 C 程序
  • 或用 lsfind

八、相关函数

opendir()
readdir()
closedir()
rewinddir()

九、总结一句话

在 CentOS 中,readdir 是用来在 C 程序里读取目录内容的函数,是 ls 等命令的底层实现之一。

如果你愿意,我也可以:

  • CentOS 7/8 实例演示
  • readdir vs readdir_r
  • 解释 inode / d_type
  • 或对比 readdir vs scandir

你想深入哪一块?

0