在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失败,程序会打印相应的错误信息。