在 Ubuntu(或者说在 Linux 下使用 C/C++)里,opendir 报错通常有几种常见原因。下面按“最常见 → 不常见”的顺序给你梳理一下,并给出排查方法。
opendir 返回 NULL 并报错(最常见)opendir 原型:
#include <dirent.h>
DIR *opendir(const char *name);
如果失败,会返回 NULL,并且设置 errno。
DIR *dir = opendir("/home/xxx/not_exist");
if (!dir) {
perror("opendir");
}
可能错误:
opendir: No such file or directory
✅ 解决:
ls 或 stat 检查opendir: Permission denied
常见于:
/root✅ 解决:
sudo 运行opendir: Not a directory
例如:
opendir("/etc/passwd");
✅ 解决:
opendir(NULL);
❌ 未定义行为,通常直接崩溃或返回错误。
DIR *dir = opendir(".");
报错类似:
error: unknown type name ‘DIR’
✅ 解决:
#include <dirent.h>
opendir 属于 libc,通常不需要额外 -l 参数。
fopen 的方式理解 opendirDIR *dir = opendir("./dir", "r"); // 错误
✅ 正确:
DIR *dir = opendir("./dir");
#include <dirent.h>
#include <stdio.h>
#include <errno.h>
DIR *dir = opendir(path);
if (dir == NULL) {
perror("opendir");
printf("errno = %d\n", errno);
}
如果你愿意,可以把:
发出来,我可以直接帮你定位是哪一类问题。