温馨提示×

ubuntu copendir和readdir区别

小樊
33
2026-09-14 18:51:38
栏目: 智能运维

在 Ubuntu(以及一般的 Linux/Unix 系统)中,opendirreaddir 都是 用于目录操作的 C 库函数(定义在 <dirent.h> 中),但它们的作用和阶段不同


一、opendir —— 打开目录

作用

打开一个目录,返回一个目录流(DIR*),并不读取目录内容

函数原型

#include <dirent.h>

DIR *opendir(const char *name);

参数

  • name:目录路径,例如 "/home/user"

返回值

  • 成功:返回 DIR*(目录流指针)
  • 失败:返回 NULL,并设置 errno

示例

DIR *dir = opendir("/home");
if (dir == NULL) {
    perror("opendir");
}

一句话总结
opendir = 打开目录,准备读


二、readdir —— 读取目录项

作用

opendir 打开的目录流中,逐个读取目录项(文件/子目录)

函数原型

#include <dirent.h>

struct dirent *readdir(DIR *dirp);

参数

  • dirpopendir 返回的 DIR*

返回值

  • 成功:返回 struct dirent*
  • 到达目录末尾:返回 NULL
  • 出错:返回 NULL,设置 errno

示例

struct dirent *entry;
while ((entry = readdir(dir)) != NULL) {
    printf("%s\n", entry->d_name);
}

一句话总结
readdir = 读取目录中的内容


三、两者关系(必须配合使用)

opendir → readdir → closedir

完整示例

#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;
}

四、对比总结表

对比项 opendir readdir
功能 打开目录 读取目录项
是否需要目录路径 ✅ 是 ❌ 否
返回值 DIR* struct dirent*
是否读取文件内容
是否必须配合使用

五、补充

  • closedir:关闭目录流(别忘了)
  • readdir 不会递归子目录
  • struct dirent 中的 d_name 是文件名,不是完整路径

如果你是想 用 C / C++ / Shell / Python 对比目录操作,也可以告诉我。

0