溫馨提示×

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

    • 功能未實現。系統不支持該操作。

注意事項

  • errno是一個全局變量,因此在調用readdir之前應該保存其當前值,并在調用之后檢查。
  • 錯誤碼的具體含義可能會因不同的Linux發行版和內核版本而略有差異。

示例代碼

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