readdir
函數在 Linux 中用于讀取目錄的內容
EACCES
:權限不足,無法訪問指定的目錄。EAGAIN
:資源暫時不可用,稍后再試。EAGAIN
:由于文件系統錯誤,操作無法完成。EIO
:輸入/輸出錯誤,可能是由于磁盤損壞或其他硬件問題導致的。EISDIR
:嘗試讀取一個符號鏈接,而不是目錄。EINVAL
:無效的參數,例如傳遞了一個無效的 DIR *
指針。EMFILE
:打開的文件描述符數量超過了系統限制。ENFILE
:打開的文件數量超過了系統限制。ENOTDIR
:指定的路徑不是一個目錄。ENOENT
:目錄不存在或無法訪問。ENOMEM
:內存不足,無法完成操作。ENAMETOOLONG
:目錄名過長。ENOLCK
:無法獲取所需的鎖。ENOSPC
:磁盤空間不足。ENOTEMPTY
:目錄非空,無法刪除或重命名。ELOOP
:符號鏈接循環,導致無限遞歸。ECHRNG
:字符集不支持指定的字符。EL2NSYNC
:Level 2 未同步。EL3HLT
:Level 3 停止。EL3RST
:Level 3 重置。ELNRNG
:網絡地址錯誤。EUNATCH
:未捕獲的信號。ENOCSI
:無法執行 CSI 操作。EL2HLT
:Level 2 停止。EBADE
:無效的交換設備。EBADR
:無效的請求描述符。EXFULL
:交換空間已滿。ENOANO
:沒有可用的 ANO。EBADRQC
:無效的控制參數。EBADSLT
:無效的 slot。EDEADLK
:死鎖情況。EBFONT
:字體文件格式錯誤。ENOSTR
:設備不支持流操作。ENODATA
:沒有數據可用。ETIME
:定時器超時。ENOSR
:沒有可用的源端口。ENONET
:網絡不可用。ENOPKG
:軟件包不可用。EREMOTEIO
:遠程 I/O 錯誤。ENOLINK
:鏈接已斷開。EADV
:廣告錯誤。ESRMNT
:設備已掛載。ECOMM
:通信錯誤。EPROTO
:協議錯誤。EMULTIHOP
:多跳錯誤。EDOTDOT
:RFS 文件系統錯誤。EBADMSG
:無效的消息。EOVERFLOW
:值溢出。ENOTUNIQ
:名稱不是唯一的。EBADFD
:無效的文件描述符。EREMCHG
:遠程地址已更改。ELIBACC
:庫訪問錯誤。ELIBBAD
:庫文件無效。ELIBSCN
:庫文件不可見。ELIBMAX
:庫文件最大限制。ELIBPATH
:庫文件路徑無效。ERESTART
:操作被信號中斷,應重新嘗試。ESTRPIPE
:流管道錯誤。EUSERS
:用戶數量超過限制。ENOTEMPTY
:目錄非空,無法刪除或重命名。ELOOP
:符號鏈接循環,導致無限遞歸。EWOULDBLOCK
:操作會被阻塞,稍后再試。EINPROGRESS
:操作正在進行中。EALREADY
:操作已經完成。ENOTSOCK
:套接字操作無效。EDESTADDRREQ
:目標地址缺失。EMSGSIZE
:消息太大,無法發送。EPROTOTYPE
:協議類型錯誤。ENOPROTOOPT
:協議選項無效。EPROTONOSUPPORT
:不支持的協議。ESOCKTNOSUPPORT
:不支持的套接字類型。EOPNOTSUPP
:操作不被支持。EPFNOSUPPORT
:文件系統不支持指定的功能。EAFNOSUPPORT
:地址族不支持指定的協議。EADDRINUSE
:地址已在本地機器上使用。EADDRNOTAVAIL
:無法分配請求的地址。ENETDOWN
:網絡接口已關閉。ENETUNREACH
:網絡不可達。ENETRESET
:網絡連接被重置。ECONNABORTED
:連接被中止。ECONNRESET
:連接被重置。ENOBUFS
:沒有可用的緩沖區。EISCONN
:套接字已連接。ENOTCONN
:套接字未連接。ESHUTDOWN
:套接字已關閉。ETOOMANYREFS
:太多引用,無法釋放。ETIMEDOUT
:操作超時。ECONNREFUSED
:連接被拒絕。EHOSTDOWN
:主機已關閉。EHOSTUNREACH
:主機不可達。EALREADY
:操作已經完成。EINPROGRESS
:操作正在進行中。ESTALE
:文件句柄已過期。EUCLEAN
:文件系統需要清理。ENOTRECOVERABLE
:狀態不可恢復。EOWNERDEAD
:擁有者已死亡。ENOTDIR
:指定的路徑不是一個目錄。EISNAM
:文件名太長。EREMOTEIO
:遠程 I/O 錯誤。當 readdir
函數返回 -1 時,可以使用 perror
或 strerror
函數來獲取具體的錯誤信息。例如:
#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
函數將打印出具體的錯誤信息。