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 函数将打印出具体的错误信息。