温馨提示×

linux readdir怎么释放资源

小樊
45
2026-09-17 20:06:04
栏目: 智能运维

在 Linux 下使用 readdir(更准确说是 opendir / readdir / closedir)时,资源释放的关键函数是 closedir。


基本用法与资源释放

1. 打开目录

#include <dirent.h>

DIR *dir = opendir("/path/to/dir");
if (dir == NULL) {
    perror("opendir");
    return -1;
}

2. 读取目录

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

3. 释放资源(非常重要)

closedir(dir);

✅ readdir 内部使用静态缓冲区,不需要手动释放 dirent
✅ 只需要 closedir 关闭 DIR *


常见错误

❌ 错误:释放 readdir 返回的指针

free(entry);  // 错误!会导致未定义行为

❌ 错误:忘记 closedir

opendir("/tmp");
// 没有 closedir → 文件描述符泄漏

使用 readdir_r(线程安全版本)

如果你使用 readdir_r:

struct dirent entry;
struct dirent *result;

readdir_r(dir, &entry, &result);
  • entry 是你自己分配的,也不需要 free
  • 仍然只需要 closedir(dir)

总结

函数 是否需要释放
opendir 需要 closedir
readdir ❌ 不需要
readdir_r ❌ 不需要
closedir ✅ 必须调用

如果你是在 C++ / RAII / 多线程 / 异常情况 下使用,也可以告诉我,我可以给你更安全的封装示例。

0 踩