如何在循环中打开和关闭文件

时间:2014-02-09 16:44:27

标签: c file file-io file-descriptor

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

1 个答案:

答案 0 :(得分:4)

您的问题是您在循环中执行了opendir,但从未执行过closedir。这将在外循环的每次迭代中泄漏fd。