温馨提示×

debian readdir和opendir啥关系

小樊
44
2026-09-07 10:16:35
栏目: 智能运维

在 Debian(以及所有类 Unix 系统,包括 Linux)里,opendir 和 readdir 是 一对配合使用的目录操作函数,都属于 POSIX 标准 C 库(dirent.h)。


一句话关系

opendir 打开目录,readdir 读取目录里的条目(文件/子目录)。


1. opendir —— 打开目录

#include <dirent.h>

DIR *opendir(const char *name);

作用:

  • 打开一个目录
  • 返回一个 DIR * 目录流(类似文件指针 FILE *)
  • 失败返回 NULL

示例:

DIR *dir = opendir("/etc");
if (!dir) {
    perror("opendir");
}

2. 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);
}

3. 典型配合使用流程

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);

4. 它们之间的关系图

opendir("/path")
      ↓
   DIR *
      ↓
readdir(DIR *)  → struct dirent (一个文件/目录)
      ↓
反复调用直到 NULL
      ↓
closedir(DIR *)

5. 常见注意点(Debian / Linux)

  • readdir 会包含 . 和 ..
  • 不是线程安全的(线程安全版是 readdir_r,但已不推荐)
  • 文件名在 d_name 里
  • 文件类型可看 d_type(Linux 支持)

6. 相关函数

函数 作用
opendir 打开目录
readdir 读目录项
closedir 关闭目录
rewinddir 重新从头读
seekdir / telldir 定位目录流

如果你愿意,我也可以:

  • 给你一个 完整可编译的 C 示例
  • 讲 readdir 和 stat 的配合
  • 或对比 opendir/readdir vs scandir / nftw

0 踩