在 Debian(及其他 Linux)里,readdir 本身不是命令,而是 C 语言库函数(readdir(3)),所以“readdir 报错”一般出现在 编译或运行 C 程序 时。下面按常见场景说明原因和解决办法。
warning: implicit declaration of function ‘readdir’
原因
解决
#include <dirent.h>
readdir 未定义undefined reference to `readdir`
原因
readnt.h 属于 libc)✅ 正确用法:
DIR *dir = opendir(".");
struct dirent *entry;
while ((entry = readdir(dir)) != NULL) {
printf("%s\n", entry->d_name);
}
closedir(dir);
Bad file descriptor / Segmentation faultDIR *dir = opendir(".");
readdir(dir); // ❌ 指针未判断
DIR *dir = opendir(".");
if (dir == NULL) {
perror("opendir");
return 1;
}
struct dirent *entry;
while ((entry = readdir(dir)) != NULL) {
printf("%s\n", entry->d_name);
}
closedir(dir);
readdir_r 已废弃(Debian 新版本)如果你看到:
warning: ‘readdir_r’ is deprecated
✅ 推荐改用 readdir()(线程安全)
Permission denied
ls -ld 目录名
解决:
sudo chmod +x 目录名
#include <stdio.h>
#include <dirent.h>
int main() {
DIR *dir = opendir(".");
if (!dir) {
perror("opendir");
return 1;
}
struct dirent *entry;
while ((entry = readdir(dir)) != NULL) {
printf("%s\n", entry->d_name);
}
closedir(dir);
return 0;
}
编译:
gcc readdir.c -o readdir
| 场景 | 说明 |
|---|---|
| Python | 用 os.listdir() / os.scandir() |
| Shell | ls、find |
| Perl | readdir(DIR) |
你可以直接贴出:
cat /etc/os-release)我可以精确定位问题并给出修改方案。