温馨提示×

CentOS readdir怎么使用

小樊
54
2026-07-09 01:40:36
栏目: 智能运维

CentOS 上,readdir 通常是 C 语言库函数,用于读取目录内容,而不是 Shell 命令。下面从 常见用法 给你说明。


一、readdir 是什么?

readdirPOSIX 标准 C 函数,定义在:

#include <dirent.h>

用于读取一个已打开的目录流中的目录项


二、readdir 函数原型

#include <dirent.h>

struct dirent *readdir(DIR *dirp);

参数

  • dirp:由 opendir() 打开的目录指针

返回值

  • 成功:返回 struct dirent *
  • 失败 / 到达目录末尾:返回 NULL

三、基本使用流程(C 程序)

示例:列出当前目录下的所有文件

#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;
}

四、编译和运行(CentOS)

gcc readdir_test.c -o readdir_test
./readdir_test

✅ CentOS 7 / 8 / Stream 都支持。


五、struct dirent 常用字段

struct dirent {
    ino_t          d_ino;       // inode 号
    off_t          d_off;
    unsigned short d_reclen;
    unsigned char  d_type;      // 文件类型(部分系统支持)
    char           d_name[256]; // 文件名
};

判断文件类型(推荐用 stat)

#include <sys/stat.h>

struct stat st;
lstat(entry->d_name, &st);
if (S_ISREG(st.st_mode)) {
    printf("普通文件\n");
}

六、常见错误

1️⃣ readdir 返回 NULL 但目录不为空?

可能是:

  • 目录指针已经遍历完
  • 没有重新 opendir

2️⃣ 跳过 ...

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

七、如果你其实是想用 Shell 命令

Shell 中类似功能:

ls

或递归:

ls -R

八、总结

场景 用法
C 程序读取目录 opendir + readdir + closedir
Shell 查看目录 ls
判断文件类型 stat / lstat

如果你是想:

  • 写 C 程序扫描目录
  • 在 CentOS 下排查 readdir 报错
  • 32 位 / 64 位兼容问题
  • 替代 readdir 的高性能方案

可以直接告诉我,我给你具体示例。

0