linux

readdir函数在Linux中的错误处理

小樊
43
2025-03-21 11:01:44
栏目: 智能运维

readdir 函数在 Linux 中用于读取目录的内容

  1. EACCES:权限不足,无法访问指定的目录。
  2. EAGAIN:资源暂时不可用,稍后再试。
  3. EAGAIN:由于文件系统错误,操作无法完成。
  4. EIO:输入/输出错误,可能是由于磁盘损坏或其他硬件问题导致的。
  5. EISDIR:尝试读取一个符号链接,而不是目录。
  6. EINVAL:无效的参数,例如传递了一个无效的 DIR * 指针。
  7. EMFILE:打开的文件描述符数量超过了系统限制。
  8. ENFILE:打开的文件数量超过了系统限制。
  9. ENOTDIR:指定的路径不是一个目录。
  10. ENOENT:目录不存在或无法访问。
  11. ENOMEM:内存不足,无法完成操作。
  12. ENAMETOOLONG:目录名过长。
  13. ENOLCK:无法获取所需的锁。
  14. ENOSPC:磁盘空间不足。
  15. ENOTEMPTY:目录非空,无法删除或重命名。
  16. ELOOP:符号链接循环,导致无限递归。
  17. ECHRNG:字符集不支持指定的字符。
  18. EL2NSYNC:Level 2 未同步。
  19. EL3HLT:Level 3 停止。
  20. EL3RST:Level 3 重置。
  21. ELNRNG:网络地址错误。
  22. EUNATCH:未捕获的信号。
  23. ENOCSI:无法执行 CSI 操作。
  24. EL2HLT:Level 2 停止。
  25. EBADE:无效的交换设备。
  26. EBADR:无效的请求描述符。
  27. EXFULL:交换空间已满。
  28. ENOANO:没有可用的 ANO。
  29. EBADRQC:无效的控制参数。
  30. EBADSLT:无效的 slot。
  31. EDEADLK:死锁情况。
  32. EBFONT:字体文件格式错误。
  33. ENOSTR:设备不支持流操作。
  34. ENODATA:没有数据可用。
  35. ETIME:定时器超时。
  36. ENOSR:没有可用的源端口。
  37. ENONET:网络不可用。
  38. ENOPKG:软件包不可用。
  39. EREMOTEIO:远程 I/O 错误。
  40. ENOLINK:链接已断开。
  41. EADV:广告错误。
  42. ESRMNT:设备已挂载。
  43. ECOMM:通信错误。
  44. EPROTO:协议错误。
  45. EMULTIHOP:多跳错误。
  46. EDOTDOT:RFS 文件系统错误。
  47. EBADMSG:无效的消息。
  48. EOVERFLOW:值溢出。
  49. ENOTUNIQ:名称不是唯一的。
  50. EBADFD:无效的文件描述符。
  51. EREMCHG:远程地址已更改。
  52. ELIBACC:库访问错误。
  53. ELIBBAD:库文件无效。
  54. ELIBSCN:库文件不可见。
  55. ELIBMAX:库文件最大限制。
  56. ELIBPATH:库文件路径无效。
  57. ERESTART:操作被信号中断,应重新尝试。
  58. ESTRPIPE:流管道错误。
  59. EUSERS:用户数量超过限制。
  60. ENOTEMPTY:目录非空,无法删除或重命名。
  61. ELOOP:符号链接循环,导致无限递归。
  62. EWOULDBLOCK:操作会被阻塞,稍后再试。
  63. EINPROGRESS:操作正在进行中。
  64. EALREADY:操作已经完成。
  65. ENOTSOCK:套接字操作无效。
  66. EDESTADDRREQ:目标地址缺失。
  67. EMSGSIZE:消息太大,无法发送。
  68. EPROTOTYPE:协议类型错误。
  69. ENOPROTOOPT:协议选项无效。
  70. EPROTONOSUPPORT:不支持的协议。
  71. ESOCKTNOSUPPORT:不支持的套接字类型。
  72. EOPNOTSUPP:操作不被支持。
  73. EPFNOSUPPORT:文件系统不支持指定的功能。
  74. EAFNOSUPPORT:地址族不支持指定的协议。
  75. EADDRINUSE:地址已在本地机器上使用。
  76. EADDRNOTAVAIL:无法分配请求的地址。
  77. ENETDOWN:网络接口已关闭。
  78. ENETUNREACH:网络不可达。
  79. ENETRESET:网络连接被重置。
  80. ECONNABORTED:连接被中止。
  81. ECONNRESET:连接被重置。
  82. ENOBUFS:没有可用的缓冲区。
  83. EISCONN:套接字已连接。
  84. ENOTCONN:套接字未连接。
  85. ESHUTDOWN:套接字已关闭。
  86. ETOOMANYREFS:太多引用,无法释放。
  87. ETIMEDOUT:操作超时。
  88. ECONNREFUSED:连接被拒绝。
  89. EHOSTDOWN:主机已关闭。
  90. EHOSTUNREACH:主机不可达。
  91. EALREADY:操作已经完成。
  92. EINPROGRESS:操作正在进行中。
  93. ESTALE:文件句柄已过期。
  94. EUCLEAN:文件系统需要清理。
  95. ENOTRECOVERABLE:状态不可恢复。
  96. EOWNERDEAD:拥有者已死亡。
  97. ENOTDIR:指定的路径不是一个目录。
  98. EISNAM:文件名太长。
  99. EREMOTEIO:远程 I/O 错误。

readdir 函数返回 -1 时,可以使用 perrorstrerror 函数来获取具体的错误信息。例如:

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

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

    dir = opendir("test_directory");
    if (dir == NULL) {
        perror("opendir");
        return 1;
    }

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

    closedir(dir);
    return 0;
}

在这个示例中,如果 opendir 函数失败,perror 函数将打印出具体的错误信息。

0
看了该问题的人还看了