温馨提示×

ubuntu copendir如何判断结束

小樊
49
2026-09-26 20:07:39
栏目: 智能运维

在 Ubuntu(Linux)下使用 C 语言通过 opendir / readdir 遍历目录时,**判断“结束”**主要依赖 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 返回 NULL

  • readdir() 每调用一次,返回一个目录项
  • 当目录读取结束时,返回 NULL
  • 此时:
    • 不是错误
    • 只是“没有更多文件了”
while ((entry = readdir(dir)) != NULL) {
    // 处理文件
}
// 到这里说明目录已经遍历完

区分“结束”和“出错”

如果你想区分:

  • 目录结束
  • 读取出错

可以使用 errno:

#include <errno.h>

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

常见误区

❌ 用 opendir 判断是否结束

  • opendir 只负责“打开目录”
  • 返回 NULL 表示打开失败,不是结束

❌ 用 closedir 判断

  • closedir 只是关闭目录
  • 不能用来判断遍历是否完成

总结

函数 用途 结束判断
opendir 打开目录 返回 NULL = 打开失败
readdir 读取目录项 返回 NULL = 结束(或出错)
closedir 关闭目录 不用于判断结束

如果你是在 C++ / Python / shell 或想用 readdir_r / getdents,也可以告诉我。

0 踩