温馨提示×

centos readdir返回什么

小樊
48
2026-09-09 04:50:41
栏目: 智能运维

在 CentOS(其实和所有 Linux 一样,因为是 POSIX / glibc 行为)中,readdir 指的是 C 库函数 readdir(),用于读取目录内容。

1. readdir 函数原型

#include <dirent.h>

struct dirent *readdir(DIR *dirp);

2. readdir 返回什么?

  • 成功时:返回一个指向 struct dirent 的指针,表示目录中的一个条目(如文件或子目录)
  • 到达目录末尾(EOF):返回 NULL
  • 出错时:返回 NULL,并设置 errno

⚠️ 注意:NULL 既可能是“目录读完”,也可能是“出错”,需要用 errno 区分。


3. struct dirent 结构体(CentOS / glibc)

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:符号链接
  • DT_UNKNOWN:未知类型

4. 示例代码

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

5. 常见问题

  • readdir 不是系统调用,而是 glibc 封装
  • 底层调用的是 getdents / getdents64
  • 线程不安全(可用 readdir_r,但已不推荐)

如果你问的是:

  • Shell 命令(如 ls)
  • Python 的 os.readdir
  • 内核层 readdir

可以告诉我,我可以按你实际场景详细说明。

0 踩