是否存在同时文件流的限制?

FTh*_*wes 6 c++ fstream

我对使用同时打开的fstreams 有一个战略问题.我必须编写一个程序,它也读取了大量文件.在每个文件中都有一堆标识符的信息,但有一次.我必须计算此信息,而不是将其保存在单独的文件中.每个标识符都出现在多个文件中,每次都应保存在同一个文件中(一次标识符多次).我期待几百个标识符,所以我怀疑我应该同时打开几百个文件组.

那么同步文件流有限制吗?或者你提出另一种方法吗?

该程序将计算大量数据(大约10GB或更大),并可能计算几个小时.

谢谢

Pot*_*ter 6

什么都有限制.文件是操作系统管理的完美示例,您必须查阅操作系统文档以了解具体限制.在Linux中,我相信它在内核中是可配置的.可能还有用户和流程配额.

我不认为200太多了.

尝试看看很简单.只需编写一个程序,不断打开更多文件,直到出现错误.

实例.

在Mac OS X 10.8上,这个程序

#include <iostream>
#include <fstream>
#include <iomanip>
#include <string>

int main() {
    int i = 0;
    std::ofstream *f;
    do {
        f = new std::ofstream( std::to_string( i ++ ) );
    } while ( * f << "hello" << std::flush );
    -- i; // Don't count last iteration, which failed to open anything.

    std::cout << i << '\n';
}
Run Code Online (Sandbox Code Playgroud)

产生输出253.所以,如果你在Mac上,你就是金色的:).

  • 对于Linux,在命令行键入`ulimit -a`以查找限制.例如,我看到`open files(-n)8192`,所以我的限制是'8192`同时打开文件描述符(或``ulimit -n`只看到没有有用文本的数字). (6认同)