温馨提示×

centos readdir如何调用

小樊
43
2026-08-19 07:23:02
栏目: 智能运维

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


一、readdir 是什么?

readdir 是 POSIX 标准 C 函数,定义在:

#include <dirent.h>

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


二、C 语言调用 readdir(最常见)

1️⃣ 基本示例

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

int main(int argc, char *argv[])
{
    DIR *dir;
    struct dirent *entry;

    if (argc < 2) {
        printf("用法: %s <目录>\n", argv[0]);
        return 1;
    }

    dir = opendir(argv[1]);
    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_test.c -o readdir_test

3️⃣ 运行

./readdir_test /tmp

三、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 符号链接

四、readdir_r(已废弃,不推荐)

旧代码可能看到:

readdir_r(dir, &entry, &result);

⚠️ 现在不推荐使用,线程安全应使用 readdir + 锁,或 openat / getdents


五、Shell 中“等价”的功能

如果你只是想在 Shell 中列出目录,不需要 readdir

ls
ls -l

或者用 find

find /tmp -maxdepth 1

六、是否可以用 Python / Perl 调用?

Python 示例(底层也是 readdir)

import os

for name in os.listdir("/tmp"):
    print(name)

七、常见误区

❌ 错误理解:

readdir /tmp

✅ 正确:

  • readdirC 函数
  • 只能在 C / C++ 程序中使用

八、总结

场景 用法
C 程序读取目录 opendir + readdir + closedir
Shell 查看目录 ls / find
脚本 os.listdir()

如果你需要:

  • 递归遍历目录
  • 过滤文件类型
  • 用 getdents 直接系统调用
  • 对比 readdir 与 ls 实现

可以继续问,我可以给你完整示例。

0