2014-02-09 74 views
1

我有一个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

写出close(fd)out while循环。 –

+0

有没有办法重置打开的目录的索引来重置readdir方法?我每次重新打开dir以便从头开始迭代 – Greeny

+1

@anon'close(fd)'应该保留在while循环中,因为open是在while循环中。 – abligh

回答

4

你的问题是,你正在做循环的opendir,但从来没有做closedir。这将在外循环的每次迭代中泄漏一个fd。

+0

+1:点亮。代码中也没有错误检查,但应该有。 –

+0

是的,我省略了错误检查以减少噪音。但感谢提示:) – Greeny

相关问题