在 Debian(或任何 Linux)上 readdir 出错,通常是程序调用 readdir() 系统/库函数失败。排查可以按下面步骤来做。
不同场景排查方式不同:
ls -ld /path/to/dir
Permission deniedNo such file or directory解决:
sudo chmod / chown
dmesg | tail
或:
journalctl -xe
看是否有:
I/O errorext4 errorbad sector检查文件系统:
sudo fsck -f /dev/sdX
(必须 umount)
如果是挂载目录:
mount | grep nfs
df -h
测试:
ls /mnt/nfs
常见错误:
Stale NFS file handleInput/output error解决:
sudo umount -f /mnt/nfs
sudo mount -a
df -i /path
如果 IUsed = 100%:
find /path -xdev -type f | wc -l
典型错误用法:
while ((entry = readdir(dir)) != NULL) {
// 没有检查 errno
}
✅ 正确做法:
errno = 0;
while ((entry = readdir(dir)) != NULL) {
// 正常处理
}
if (errno != 0) {
perror("readdir");
}
常见 errno:
EBADF:目录流已关闭ENOENT:目录被删EIO:磁盘错误_FILE_OFFSET_BITS=64strace -e trace=file your_command
例如:
strace ls /bad/dir
你会看到:
openat(...) = -1 EACCES
readdir(...) = -1 EIO
你可以告诉我:
我可以直接帮你定位是哪一类问题。