在 Ubuntu(Linux)下,opendir 打开的目录句柄,需要通过 closedir 来关闭。下面从使用方式、常见错误和示例几个方面说明。
#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) 释放DIR *dir = opendir("/tmp");
// 没有 closedir
结果:程序运行多次后可能报
Too many open files
while (...) {
DIR *dir = opendir(path);
// 忘记 closedir
}
✅ 正确做法:
DIR *dir = opendir(path);
if (dir) {
// 读目录
closedir(dir);
}
如果在 fork 前 opendir,子进程也会继承:
DIR *dir = opendir("/tmp");
if (fork() == 0) {
closedir(dir); // 子进程也要关
exit(0);
}
closedir(dir);
可以用:
ls -l /proc/<pid>/fd
目录句柄通常显示为:
lr-x------ 1 user user 64 ... /tmp
import os
fd = os.open("dir", os.O_RDONLY | os.O_DIRECTORY)
os.close(fd)
exec 3< /tmp
exec 3<&-
如果你说的是 某个具体程序 / 服务 / 代码场景(比如 nginx、Python、C++、某个 daemon),可以贴代码,我可以更精确地告诉你怎么关。