温馨提示×

ubuntu copendir如何关闭资源

小樊
37
2026-09-17 19:42:08
栏目: 智能运维

在 Ubuntu(Linux)下使用 opendir() 打开目录后,必须通过 closedir() 来关闭资源,否则会造成文件描述符泄漏。

基本用法

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

int main() {
    DIR *dir = opendir("/tmp");
    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;
}

关键点

  • opendir() 返回 DIR *
  • 用完后必须调用 closedir(DIR *)
  • 即使发生错误(如 readdir 失败),也要 closedir

常见错误示例(资源未释放)

DIR *dir = opendir(path);
if (!dir) return;

// 忘记 closedir(dir);  ❌ 资源泄漏

在异常 / 多分支中确保关闭

DIR *dir = opendir(path);
if (!dir) {
    perror("opendir");
    return 1;
}

if (some_error) {
    closedir(dir);
    return 1;
}

closedir(dir);

补充

  • opendir 内部会占用一个文件描述符
  • 长时间运行程序(如服务)不关闭会导致 Too many open files

如果你是用 C++ / Python / Shell 操作目录,也可以告诉我,我可以给你对应语言的关闭方式。

0