在 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 失败),也要 closedirDIR *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 操作目录,也可以告诉我,我可以给你对应语言的关闭方式。