在 Debian(或任意 Linux)上使用 opendir() 报错,通常有以下几种常见原因。下面按出现频率和典型场景给你梳理一下,并给出排查办法。
DIR *dir = opendir("/some/path");
if (dir == NULL) {
perror("opendir");
}
典型错误
✅ 排查:
ls -ld /some/path
pwd
即使目录存在,也可能没权限访问。
错误信息
opendir: Permission denied
✅ 排查:
ls -ld /some/path
id
✅ 解决:
sudoopendir("/etc/passwd");
错误信息
opendir: Not a directory
✅ 排查:
file /some/path
Debian 默认路径长度上限:
opendir("/link/to/dir");
如果链接失效:
No such file or directory
✅ 排查:
ls -l /link/to/dir
错误信息可能是
Stale file handle
Input/output error
✅ 排查:
mount | grep path
df -h
systemd 服务 ProtectHome=true#include <dirent.h>
#include <stdio.h>
#include <errno.h>
DIR *dir = opendir(path);
if (!dir) {
perror("opendir");
printf("errno = %d\n", errno);
}
常见 errno:
| errno | 含义 |
|---|---|
| ENOENT | 目录不存在 |
| EACCES | 权限不足 |
| ENOTDIR | 不是目录 |
| EMFILE / ENFILE | 文件描述符耗尽 |
Debian 默认使用 AppArmor
✅ 查看:
sudo aa-status
Debian 新版本:
/bin → /usr/bin你可以贴出:
我可以直接帮你定位是哪一类问题。