在 Ubuntu(Linux)下使用 opendir() 返回“为空”(即返回 NULL)通常不是函数本身的问题,而是路径或权限等原因导致的。下面按常见原因给你梳理一下。
opendir() 返回 NULL 的常见原因DIR *dir = opendir("/path/to/dir");
if (dir == NULL) {
perror("opendir");
}
如果路径写错或目录不存在,opendir 会返回 NULL。
✅ 检查方式:
ls -ld /path/to/dir
即使目录存在,如果当前用户没有执行(x)权限,也会失败。
比如:
drwxr--r-- root root /root
普通用户打开就会失败。
✅ 检查:
ls -ld 目录名
✅ 解决:
sudo chmod +x 目录
# 或
sudo chown 当前用户:当前用户 目录
opendir("/etc/passwd"); // 错误
✅ 检查:
file /etc/passwd
比如:
char path[256];
strcpy(path, "/home/user/");
// 末尾多了 \0 或字符串未结束
✅ 建议:
const char *path = "/home/user";
DIR *dir = opendir(path);
lrwxrwxrwx link -> /no/such/dir
✅ 检查:
readlink link
ls -l link
#include <dirent.h>
#include <stdio.h>
#include <errno.h>
int main() {
DIR *dir = opendir("/your/path");
if (dir == NULL) {
perror("opendir failed");
return 1;
}
struct dirent *entry;
while ((entry = readdir(dir)) != NULL) {
printf("%s\n", entry->d_name);
}
closedir(dir);
return 0;
}
perror() 会告诉你具体原因:
No such file or directoryPermission deniedreaddir 没内容那可能是:
. 和 ..你可以贴出:
ls -ld 目录 的输出我可以帮你精准定位问题。