溫馨提示×

readdir函數在Linux中的錯誤處理

小樊
47
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
亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女