温馨提示×

centos readdir怎么用

小樊
39
2026-08-19 06:57:02
栏目: 智能运维

CentOS(以及所有 Linux) 里,readdir 不是 shell 命令,而是 C 语言标准库函数,用来读取目录内容。下面分几种常见用法给你说明。


一、readdir 是什么?

readdir 定义在:

#include <dirent.h>

用于 遍历目录中的文件和子目录


二、基本用法(C 语言示例)

1️⃣ 示例代码(最常用)

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

int main() {
    DIR *dir;
    struct dirent *entry;

    dir = opendir(".");  // 打开当前目录
    if (dir == NULL) {
        perror("opendir");
        return 1;
    }

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

    closedir(dir);
    return 0;
}

2️⃣ 编译(CentOS)

gcc readdir.c -o readdir
./readdir

三、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 判断

if (entry->d_type == DT_REG) {
    printf("普通文件\n");
} else if (entry->d_type == DT_DIR) {
    printf("目录\n");
}

⚠️ 注意:

  • d_type 不是所有文件系统都支持(如某些 NFS)

五、常见错误用法

不能直接在 shell 里用

readdir /tmp   # 错误

✅ 正确方式:

  • 写 C 程序
  • 或使用 shell 命令代替

六、CentOS 下 shell 替代方案

如果你只是想“读目录”,不一定非要用 readdir

ls
ls -l
find .

七、常见面试 / 实战问题

1️⃣ 如何忽略 ...

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

2️⃣ readdir 与 readdir_r 区别

  • readdir推荐(线程安全情况良好)
  • readdir_r已废弃

八、如果你是想做这些事

需求 建议
遍历目录 readdir
判断文件类型 stat()
递归遍历 readdir + stat + 递归
shell 脚本 for f in *

如果你愿意,可以告诉我:

  • ✅ 你是 写 C 程序 还是 用 shell
  • ✅ 想遍历 本地目录 / NFS / 特殊文件系统
  • ✅ 是否要 递归读取

我可以直接给你完整可用代码

0