温馨提示×

linux readdir返回什么

小樊
41
2026-09-17 20:00:03
栏目: 智能运维

在 Linux 中,readdir 通常指 POSIX 标准库函数 readdir(),用于读取目录内容。


1. readdir() 函数原型

#include <dirent.h>

struct dirent *readdir(DIR *dirp);

2. 返回值说明

✅ 成功时

  • 返回一个指向 struct dirent 的指针
  • 该结构体描述目录中的一个条目(文件 / 子目录等)
  • 每次调用返回下一个目录项

❌ 失败时

  • 返回 NULL
  • 并设置 errno

⏹ 目录读取结束时

  • 也返回 NULL
  • 但不会设置 errno

⚠️ 因此判断是否到目录末尾,应:

errno = 0;
while ((entry = readdir(dir)) != NULL) {
    // 处理 entry
}
if (errno != 0) {
    perror("readdir");
}

3. struct dirent 结构(常见字段)

struct dirent {
    ino_t          d_ino;     // inode 号
    off_t          d_off;     // 偏移量(非 POSIX 标准)
    unsigned short d_reclen;  // 记录长度
    unsigned char  d_type;    // 文件类型(Linux 扩展)
    char           d_name[];  // 文件名(以 '\0' 结尾)
};

常见 d_type

含义
DT_REG 普通文件
DT_DIR 目录
DT_LNK 符号链接
DT_UNKNOWN 未知

4. 使用示例

DIR *dir = opendir(".");
struct dirent *entry;

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

closedir(dir);

5. 补充说明

  • readdir() 不是线程安全
  • 线程安全版本:readdir_r()(已不推荐)
  • 现代推荐:readdir() + 单线程或加锁

如果你问的是:

  • 系统调用 getdents / getdents64
  • Python 的 os.readdir
  • Shell 中的 readdir

可以告诉我,我可以进一步解释。

0