在 Ubuntu(类 Unix 系统)中,opendir() 用于打开一个目录,其权限要求主要涉及文件系统的访问权限和目录自身的权限。
opendir() 本身的权限要求opendir(const char *name) 成功的前提是:
x 表示“可以进入/访问该目录”r(读)权限也能 opendirx假设目录为 /home/user/test:
drwxr-x--- user user test
user:可以 opendiropendiropendir(无 x 权限)| 情况 | errno |
|---|---|
| 无执行权限 | EACCES |
| 路径不存在 | ENOENT |
| 不是目录 | ENOTDIR |
| 路径太长 | ENAMETOOLONG |
readdir() 的区别(重要)opendir():只需要 x 权限readdir():需要 r 权限
r,opendir() 成功但读不到内容#include <dirent.h>
#include <stdio.h>
int main() {
DIR *dir = opendir("/some/dir");
if (!dir) {
perror("opendir");
return 1;
}
closedir(dir);
return 0;
}
在 Ubuntu 中,
opendir()只要求对目标目录及其所有父目录有“执行(x)权限”,不要求读(r)权限。
如果你有特定场景(如 root、容器、NFS、AppArmor),可以告诉我,我可以更具体地分析。