在 Debian(以及一般的 Linux 系统)里,readdir 本身是否需要权限,取决于你“读”的那个目录本身的权限,而不是 readdir() 这个函数。
要。
如果你对某个目录没有执行(x)权限,你就不能 readdir() 它;
如果你对目录没有读(r)权限,你通常也不能列出其中的文件名(readdir 会失败或被限制)。
readdir 是干什么的readdir() 是 C 库函数,用来读取一个已经打开的目录流(DIR*)中的目录项(文件名等)。
DIR *dir = opendir("/some/dir");
struct dirent *entry = readdir(dir);
但前提是:
opendir() 成功opendir() 本身就需要权限目录的权限位含义和文件不同:
| 权限 | 对目录的意义 |
|---|---|
| r(读) | 可以列目录内容(readdir 能看到文件名) |
| w(写) | 可以增删文件/改名 |
| x(执行) | 可以“进入”目录(access 其内容) |
✅ 有 r + x
opendir + readdir❌ 只有 r,没有 x
opendir 会失败(Permission denied)❌ 只有 x,没有 r
cd 进目录readdirls: cannot open directory '.': Permission denied
原因通常是:
x 权限nosuid/nodev 等特殊选项)readdir在 Debian 上使用
readdir()需要目录的执行权限(x),通常也需要读权限(r)才能列出内容。
没有权限,opendir()或readdir()就会返回EACCES。
如果你愿意,我可以:
stat / access / opendir 的权限差异