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