在 Debian(以及所有类 Unix 系统,包括 Linux)里,opendir 和 readdir 是 一对配合使用的目录操作函数,都属于 POSIX 标准 C 库(dirent.h)。
opendir 打开目录,readdir 读取目录里的条目(文件/子目录)。
opendir —— 打开目录#include <dirent.h>
DIR *opendir(const char *name);
作用:
DIR * 目录流(类似文件指针 FILE *)NULL示例:
DIR *dir = opendir("/etc");
if (!dir) {
perror("opendir");
}
readdir —— 读取目录项#include <dirent.h>
struct dirent *readdir(DIR *dirp);
作用:
opendir 打开的目录流中struct dirent *NULL示例:
struct dirent *entry;
while ((entry = readdir(dir)) != NULL) {
printf("%s\n", entry->d_name);
}
DIR *dir = opendir("/tmp");
if (!dir) {
perror("opendir");
return 1;
}
struct dirent *ent;
while ((ent = readdir(dir)) != NULL) {
printf("%s\n", ent->d_name);
}
closedir(dir);
opendir("/path")
↓
DIR *
↓
readdir(DIR *) → struct dirent (一个文件/目录)
↓
反复调用直到 NULL
↓
closedir(DIR *)
readdir 会包含 . 和 ..readdir_r,但已不推荐)d_name 里d_type(Linux 支持)| 函数 | 作用 |
|---|---|
opendir |
打开目录 |
readdir |
读目录项 |
closedir |
关闭目录 |
rewinddir |
重新从头读 |
seekdir / telldir |
定位目录流 |
如果你愿意,我也可以: