温馨提示×

debian readdir错误码代表啥

小樊
40
2026-09-16 12:42:02
栏目: 智能运维

在 Debian(以及所有 Linux/Unix 系统)里,readdir() 是一个用于读取目录内容的系统调用 / 库函数(定义在 <dirent.h>)。

它本身不直接返回错误码,而是通过 返回值 + errno 来表示错误。


一、readdir 基本行为

struct dirent *readdir(DIR *dirp);
  • 成功:返回指向 struct dirent 的指针
  • 到达目录末尾:返回 NULL,errno 不变
  • 出错:返回 NULL,errno 被设置

⚠️ 注意:
返回 NULL 不一定代表出错,必须配合 errno 判断。


二、常见 readdir 相关 errno 含义

errno 含义 常见原因
EBADF 无效的文件描述符 DIR 指针已关闭或损坏
ENOENT 目录不存在 目录在读取过程中被删除
EACCES 权限不足 对目录没有读权限
ENOMEM 内存不足 系统无法分配内存
EIO I/O 错误 磁盘、文件系统损坏
EOVERFLOW 值溢出 文件过大(某些 32 位系统)
EINTR 被信号中断 读取时被信号打断

三、典型错误示例

1️⃣ 目录被删

readdir(dir);
// errno = ENOENT

2️⃣ 权限不足

ls /root
# Permission denied

对应 EACCES

3️⃣ 目录已关闭

closedir(dir);
readdir(dir);  // EBADF

四、正确判断错误的方式

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

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

五、相关函数对比

函数 说明
opendir() 打开目录
readdir() 读取一个目录项
closedir() 关闭目录
readdir_r() 线程安全版本(已不推荐)

六、如果你看到的是特定错误码

你可以直接告诉我:

  • 错误码数字(如 2, 13, 5)
  • 或 errno 名称(如 EACCES)
  • 或出错场景(磁盘 / NFS / Docker)

我可以帮你精准分析 ✅

0 踩