温馨提示×

ubuntu readdir返回什么值

小樊
40
2026-09-21 20:33:03
栏目: 智能运维

在 Ubuntu(或者说在 Linux 下使用 C/C++ 编程)中,readdirPOSIX 标准库函数,用于读取目录内容。


1. readdir 函数原型

#include <dirent.h>

struct dirent *readdir(DIR *dirp);

2. 返回值说明

✅ 成功时

  • 返回一个指向 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]; // 文件名
};

❌ 失败时 / 目录读取结束

  • 返回 NULL
  • 并设置 errno
    • EBADF:目录流无效
    • 其他错误码(如 I/O 错误)

⚠️ 注意:
读到目录末尾也是返回 NULL,但这不是错误


3. 如何区分“结束”和“错误”

errno = 0;
struct dirent *entry = readdir(dir);

if (entry == NULL) {
    if (errno != 0) {
        // 出错了
        perror("readdir");
    } else {
        // 正常读到目录结尾
    }
}

4. 使用示例

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

int main() {
    DIR *dir = opendir(".");
    if (!dir) {
        perror("opendir");
        return 1;
    }

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

    closedir(dir);
    return 0;
}

5. 补充说明(Ubuntu / Linux)

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

如果你是指:

  • Shell 命令
  • Python 的 os.readdir
  • 系统调用 getdents

可以告诉我,我可以更精确地回答。

0