在Linux系統中,readdir函數用于讀取目錄中的條目。當readdir函數遇到錯誤時,它會返回NULL,并設置全局變量errno來指示具體的錯誤類型。以下是一些常見的errno錯誤碼及其含義:
EACCES
EAGAIN
EBADF
readdir的目錄文件描述符不正確或已經關閉。EDEADLK
EFAULT
readdir的緩沖區地址無效。EINVAL
readdir的參數不正確。EMFILE
ENFILE
ENOENT
ENOTDIR
ENOSPC
ENOTEMPTY
ELOOP
EIO
ENAMETOOLONG
ENOLCK
ENOSYS
errno是一個全局變量,因此在調用readdir之前應該保存其當前值,并在調用之后檢查。#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;
}
在這個示例中,如果opendir或readdir失敗,程序會打印相應的錯誤信息。