我有一个while
循环,用于打开(并关闭)每个循环中的文件。在一些循环之后,我最终出现了“太多打开的文件”问题 - 但我每次在阅读文件内容后都会调用close
。有人可以帮助我吗?
for (;;)
{
dir = opendir( "/proc");
while ( (entry = readdir( dir)) != NULL)
{
pid = atoi( entry->d_name);
// Only processes with a "number" are of interest
if ( pid == 0)
continue;
sprintf( fname, "/proc/%d/cmdline", pid);
fd = open( fname, O_RDONLY);
read( fd, line, MAX_LINE);
/* ... */
close( fd);
}
}
答案 0 :(得分:4)
您的问题是您在循环中执行了opendir
,但从未执行过closedir
。这将在外循环的每次迭代中泄漏fd。