在 Ubuntu / Linux 中,opendir() 不是“何时用 Ubuntu”的问题,而是 何时在 C/C++ 程序里用 opendir() 的问题。
下面分点说明。
opendir() 是什么?opendir() 是 POSIX 标准库函数,用于 打开一个目录流,以便后续读取目录内容。
#include <dirent.h>
DIR *opendir(const char *name);
返回值是 DIR *,配合以下函数使用:
readdir():读取目录项closedir():关闭目录流opendir()?典型场景:
ls 类似功能stat())示例:列出当前目录所有文件
#include <dirent.h>
#include <stdio.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;
}
readdir() 只能拿到文件名,通常需要配合:
#include <sys/stat.h>
lstat() / stat()
用于判断文件类型。
opendir() 在以下系统中都可用:
只要:
#include <dirent.h>
opendir()?Shell 里不需要 opendir(),直接用:
ls
for f in *; do echo "$f"; done
这些语言有更高级的 API:
os.listdir()、os.scandir()Files.walk()os.ReadDir()如果只是操作一个已知文件:
open("test.txt", O_RDONLY);
不需要 opendir()。
closedir()会导致 文件描述符泄漏。
. 和 ..readdir() 会返回:
.
..
需要手动过滤。
在 Ubuntu 下,当你用 C/C++ 编写程序,需要打开并遍历目录内容时,就用
opendir()。
如果你愿意,我可以:
opendir vs readdir vs scandir