在 Debian(以及其它 Linux 发行版)里,opendir 本身没有“参数”可以传错,它是一个标准 C 库函数:
#include <dirent.h>
DIR *opendir(const char *name);
常见的“报错”通常不是 opendir 这个函数“参数不对”,而是以下几种情况之一。下面按出现频率说明。
DIR *dir = opendir(NULL); // ❌
opendir(NULL) 会返回 NULL,并且 errno 通常是:
EFAULT(地址错误)✅ 正确写法:
opendir("/some/dir");
DIR *dir = opendir("/no/such/dir");
if (!dir) {
perror("opendir");
}
常见错误:
ENOENT:目录不存在EACCES:权限不足ENOTDIR:给的不是目录,而是文件在 Debian 上尤其常见的是:
/root 目录普通用户无权限很多人混淆了:
opendir /tmp
Debian 没有 opendir 命令
✅ 正确命令可能是:
ls /tmp
或 C 程序里调用 opendir()
DIR *dir = opendir(".");
如果没写:
#include <dirent.h>
会报类似:
implicit declaration of function ‘opendir’
✅ 解决:
#include <dirent.h>
DIR *dir = opendir(123); // ❌
opendir 只接受 const char *
✅ 正确:
opendir("/var/log");
#include <dirent.h>
#include <stdio.h>
#include <errno.h>
int main() {
DIR *dir = opendir("/tmp");
if (!dir) {
perror("opendir");
return 1;
}
struct dirent *entry;
while ((entry = readdir(dir)) != NULL) {
printf("%s\n", entry->d_name);
}
closedir(dir);
return 0;
}
你可以把:
cat /etc/debian_version)发出来,我可以精确指出是哪一行的问题。