在 Debian(以及其他类 Unix 系统)里,opendir 是 C 语言标准库(<dirent.h>)提供的函数,用来打开一个目录流,通常与 readdir、closedir 配合使用。
opendir 是什么DIR *opendir(const char *name);
nameDIR *(目录流)NULL(可用 errno 判断原因)当你需要程序级列举目录中的文件和子目录时:
DIR *dir = opendir("/var/log");
struct dirent *entry;
while ((entry = readdir(dir)) != NULL) {
printf("%s\n", entry->d_name);
}
closedir(dir);
✅ 适合:
ls 类似功能系统命令 ls 的底层逻辑就是:
opendirreaddir例如:
.log 文件while ((entry = readdir(dir))) {
if (strstr(entry->d_name, ".conf"))
printf("found: %s\n", entry->d_name);
}
❌ 直接用 shell 就能解决的:
ls /etc
find /var -name "*.log"
❌ 高级需求:
statnftwgetdents| 方法 | 场景 |
|---|---|
opendir + readdir |
C 程序遍历目录 |
glob |
匹配路径模式 |
scandir |
自动排序/过滤 |
find |
Shell 脚本 |
ls |
人工操作 |
DIR *dir = opendir("/not/exist");
// 忘记判断 NULL
✅ 正确:
if (!dir) {
perror("opendir");
return -1;
}
如果你愿意,我可以:
opendir vs std::filesystem(C++)你更想了解哪一部分?