温馨提示×

ubuntu copendir怎样判断结束

小樊
44
2026-09-17 19:44:02
栏目: 智能运维

在 Ubuntu(Linux)下使用 C 语言进行目录遍历时,opendir 本身不会告诉你“结束”,它只是打开目录并返回一个 DIR *
判断“目录读取结束”是靠 readdir 的返回值来完成的。


基本用法

#include <dirent.h>
#include <stdio.h>

int main() {
    DIR *dir = opendir(".");
    if (dir == NULL) {
        perror("opendir");
        return 1;
    }

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

    closedir(dir);
    return 0;
}

如何判断“结束”

目录结束的标志是:

readdir(dir) == NULL
  • readdir 每调用一次,返回一个目录项
  • 当没有更多目录项时,返回 NULL
  • 此时表示目录遍历结束(不是错误

opendir / readdir 的返回含义

函数 返回值 含义
opendir NULL 打开失败(权限不足、路径不存在等)
readdir NULL 目录读取结束 出错
closedir 0 / -1 关闭成功 / 失败

区分“结束”和“出错”

如果你想严格区分:

#include <errno.h>

errno = 0;
entry = readdir(dir);
if (entry == NULL) {
    if (errno != 0) {
        perror("readdir");
    } else {
        // 正常结束
    }
}

总结一句话

opendir 只负责打开目录,readdir 返回 NULL 才表示目录遍历结束。

如果你愿意,我也可以给你:

  • 递归遍历目录示例
  • scandir 用法
  • C++ std::filesystem 写法
  • 与 Windows FindNextFile 的对比

0