温馨提示×

怎样关闭ubuntu copendir句柄

小樊
42
2026-09-23 22:46:05
栏目: 智能运维

在 Ubuntu(Linux)下,opendir 打开的目录句柄,需要通过 closedir 来关闭。下面从使用方式、常见错误和示例几个方面说明。


1. 基本用法(C 语言)

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

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

    // 使用 dir ...

    closedir(dir);  // 关闭目录句柄
    return 0;
}

✅ 关键点

  • opendir 返回 DIR *
  • 必须用 closedir(dir) 释放
  • 不关闭会导致 文件描述符泄漏

2. 常见错误

❌ 忘记关闭

DIR *dir = opendir("/tmp");
// 没有 closedir

结果:程序运行多次后可能报
Too many open files


❌ 在循环中重复 opendir

while (...) {
    DIR *dir = opendir(path);
    // 忘记 closedir
}

✅ 正确做法:

DIR *dir = opendir(path);
if (dir) {
    // 读目录
    closedir(dir);
}

3. 在 fork / 子进程中关闭

如果在 fork 前 opendir,子进程也会继承:

DIR *dir = opendir("/tmp");

if (fork() == 0) {
    closedir(dir);  // 子进程也要关
    exit(0);
}
closedir(dir);

4. 只想“查看”已打开的目录句柄?

可以用:

ls -l /proc/<pid>/fd

目录句柄通常显示为:

lr-x------ 1 user user 64 ... /tmp

5. 如果用的是其他语言

Python

import os
fd = os.open("dir", os.O_RDONLY | os.O_DIRECTORY)
os.close(fd)

Shell

exec 3< /tmp
exec 3<&-

如果你说的是 某个具体程序 / 服务 / 代码场景(比如 nginx、Python、C++、某个 daemon),可以贴代码,我可以更精确地告诉你怎么关。

0 踩