linux

Linux readdir的错误码有哪些

小樊
47
2025-08-26 13:43:48
栏目: 智能运维

在Linux系统中,readdir函数用于读取目录中的条目。当readdir函数遇到错误时,它会返回NULL,并设置全局变量errno来指示具体的错误类型。以下是一些常见的errno错误码及其含义:

常见错误码

  1. EACCES

    • 权限被拒绝。尝试访问的目录没有足够的权限。
  2. EAGAIN

    • 资源暂时不可用。这通常是由于系统资源不足导致的。
  3. EBADF

    • 文件描述符无效。传递给readdir的目录文件描述符不正确或已经关闭。
  4. EDEADLK

    • 死锁检测到。文件系统检测到可能导致死锁的操作。
  5. EFAULT

    • 地址空间不可访问。传递给readdir的缓冲区地址无效。
  6. EINVAL

    • 无效参数。传递给readdir的参数不正确。
  7. EMFILE

    • 打开的文件描述符数量达到上限。
  8. ENFILE

    • 系统范围内的文件描述符数量达到上限。
  9. ENOENT

    • 目录不存在。指定的目录路径不存在。
  10. ENOTDIR

    • 不是目录。指定的路径不是一个有效的目录。
  11. ENOSPC

    • 没有足够的空间。文件系统空间不足。
  12. ENOTEMPTY

    • 目录非空。尝试删除一个非空的目录。
  13. ELOOP

    • 太多的符号链接。路径中存在过多的符号链接,导致循环引用。
  14. EIO

    • 输入/输出错误。磁盘或其他I/O设备发生错误。
  15. ENAMETOOLONG

    • 文件名太长。指定的文件或目录名超过了系统限制。
  16. ENOLCK

    • 没有可用的锁。文件系统无法获取所需的锁。
  17. ENOSYS

    • 功能未实现。系统不支持该操作。

注意事项

示例代码

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

int main() {
    DIR *dir;
    struct dirent *entry;

    dir = opendir(".");
    if (dir == NULL) {
        fprintf(stderr, "opendir error: %s\n", strerror(errno));
        return EXIT_FAILURE;
    }

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

    if (errno != 0) {
        fprintf(stderr, "readdir error: %s\n", strerror(errno));
    }

    closedir(dir);
    return EXIT_SUCCESS;
}

在这个示例中,如果opendirreaddir失败,程序会打印相应的错误信息。

0
看了该问题的人还看了