温馨提示×

ubuntu copendir如何释放资源

小樊
36
2026-09-05 18:09:15
栏目: 智能运维

在 Ubuntu(Linux)下使用 C/C++ 编程时,opendir() 用来打开一个目录,对应的资源释放函数是 closedir()

基本用法

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

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

    // 使用 dir(如 readdir)

    // 释放资源
    closedir(dir);
    return 0;
}

关键点

  • opendir() 成功返回一个 DIR *
  • 必须用 closedir(DIR *) 释放
  • 不要 free(dir)DIR 不是普通 malloc 的内存
  • 如果 opendir() 返回 NULL不要调用 closedir()

常见错误

❌ 错误:

free(dir);      // 错误
close(dir);     // 错误(这是文件描述符用的)

✅ 正确:

closedir(dir);

与 fdopendir 的区别

如果你用的是:

DIR *dir = fdopendir(fd);

调用 closedir(dir) 后,fd 也会被关闭,不需要再 close(fd)

如果你 不想让 closedir 关闭 fd,需要:

int fd2 = dup(fd);
DIR *dir = fdopendir(fd2);

总结一句话:
Ubuntu 下 opendir 打开目录,用 closedir 释放资源。

如果你用的是 C++(如 std::filesystem)或 shell 脚本,也可以告诉我,我可以给你对应方式。

0