温馨提示×

centos readdir返回什么值

小樊
43
2026-10-09 01:20:00
栏目: 智能运维

在 CentOS(其实是 Linux 通用行为,和 CentOS 版本无关)里,readdir 的行为如下:


1. readdir 是什么

readdir 是 POSIX / glibc 提供的目录读取函数,原型:

#include <dirent.h>

struct dirent *readdir(DIR *dirp);

用于读取目录流中的下一个目录项。


2. readdir 的返回值

✅ 成功时

  • 返回一个 指向 struct dirent 的指针
  • 该结构体包含目录项信息(如文件名)
struct dirent {
    ino_t          d_ino;
    off_t          d_off;
    unsigned short d_reclen;
    unsigned char  d_type;
    char           d_name[256];
};

⚠️ 注意:

  • 返回的指针 指向静态分配的内存
  • 下一次调用 readdir 会覆盖该内容
  • 不需要 free

❌ 到达目录末尾(EOF)

  • 返回 NULL
  • errno 不会被设置

❌ 发生错误

  • 返回 NULL
  • errno 被设置(如 EBADF)

✅ 判断方式:

errno = 0;
struct dirent *entry = readdir(dir);
if (entry == NULL) {
    if (errno != 0) {
        perror("readdir");
    } else {
        // 正常结束
    }
}

3. 简单示例代码(CentOS / Linux)

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

4. 常见误区

误区 正确说明
readdir 返回文件名字符串 ❌ 返回 struct dirent *
NULL 一定是错误 ❌ 也可能是目录结束
需要 free 返回值 ❌ 不能 free

5. 补充说明(CentOS 相关)

  • CentOS 7 / 8 / Stream 都使用 glibc
  • readdir 是 线程不安全 的
  • 线程安全版本:readdir_r(已不推荐)或 readdir + 锁

如果你是想问:

  • readdir 在 系统调用层(getdents)
  • 或 Python / Shell 中的 readdir
  • 或 返回值的具体字段含义

可以继续问,我可以按具体场景说明。

0 踩