在 Ubuntu(Linux) 上,readdir 本身是可能报错的,但是否报错取决于 使用方式、文件系统和运行环境。
下面分情况说清楚。
readdir 是什么在 Ubuntu 中,readdir 通常指:
readdir(2)(较老,不推荐)readdir(3)(最常用,来自 <dirent.h>)示例代码:
#include <dirent.h>
DIR *dir = opendir("/some/path");
struct dirent *entry;
while ((entry = readdir(dir)) != NULL) {
// 处理 entry
}
readdir 会不会“自己”报错?readdir 本身一般不会直接返回错误码,而是在以下情况出问题:
→ readdir 返回 NULL 表示读完了
DIR *dir = opendir("/no/such/dir");
if (!dir) {
perror("opendir");
}
真正错误在 opendir
errno = 0;
entry = readdir(dir);
if (entry == NULL && errno != 0) {
perror("readdir");
}
常见错误:
EACCES:权限不足ENOENT:目录被删除EBADF:DIR 指针无效ENOMEM:内存不足⚠️ 注意:
readdir 返回 NULL 不代表一定出错,必须配合 errno 判断。
在 Ubuntu 上如果目录是:
readdir 可能:
如果在 readdir 过程中:
可能出现:
EBADFDIR *dir = opendir(path);
if (!dir) {
perror("opendir");
return;
}
errno = 0;
struct dirent *entry;
while ((entry = readdir(dir)) != NULL) {
// 正常处理
}
if (errno != 0) {
perror("readdir");
}
closedir(dir);
Ubuntu 上
readdir本身很少“无缘无故”报错,但目录异常、权限问题、文件系统问题都会导致它出错。
如果你愿意,可以告诉我:
我可以帮你精准定位问题。