在 Ubuntu(Linux)下,opendir() 报错了,一般不是“系统问题”,而是路径、权限或代码使用方式的问题。可以按下面步骤排查。
opendir() 失败时返回 NULL,并且会设置 errno。
一定要打印错误信息:
#include <dirent.h>
#include <stdio.h>
#include <errno.h>
#include <string.h>
DIR *dir = opendir("/some/path");
if (dir == NULL) {
printf("opendir failed: %s\n", strerror(errno));
}
常见 errno 含义:
| errno | 含义 |
|---|---|
| ENOENT | 目录不存在 |
| EACCES | 权限不足 |
| ENOTDIR | 路径不是目录 |
| EMFILE / ENFILE | 文件描述符用光了 |
opendir("/home/user/nonexist");
✅ 解决:
ls -ld /home/user/nonexist
确保路径存在,且是目录。
ls -ld /root
✅ 解决:
sudo 运行程序chmod 755 dir
opendir("/etc/passwd");
✅ 解决: 确认是目录,不是文件。
opendir("test");
✅ 解决:
system("pwd");
#include <dirent.h>
#include <sys/types.h>
#include <dirent.h>
#include <stdio.h>
#include <errno.h>
#include <string.h>
int main() {
DIR *dir = opendir("/tmp");
if (!dir) {
perror("opendir");
return 1;
}
struct dirent *entry;
while ((entry = readdir(dir)) != NULL) {
printf("%s\n", entry->d_name);
}
closedir(dir);
return 0;
}
你可以直接把:
发出来,我可以帮你精确定位问题。