用C写大二进制文件

时间:2015-09-04 00:08:55

标签: c file io binary

我使用64位mingw在windows x64上编译c代码。 我使用fwrite从内存阵列创建二进制文件。我想写〜20Gb调用这个函数,但它只写到1.4~1.5gb然后它停止写入(没有崩溃,只是挂在那里....什么都不做)。 有什么解决方案吗?现在我写了20个文件,然后合并它们。 将文件打开为' ab'但如果我使用该模式,我无法正确读取文件。

示例(伪)代码:

    short* dst= malloc(20GB);
    *calculations to fill dst* 
    file=fopen("myfile",'wb');
    fwrite(dst, sizeof(short), 20GB/sizeof(short), file);
    fclose(file)

该程序永远不会结束,文件大小永远不会超过1.5GB

3 个答案:

答案 0 :(得分:4)

将它写成较小的块。为天堂的缘故,不要试图malloc 20gb。

答案 1 :(得分:0)

根据环境(操作系统,内存模型,文件系统),可能无法创建大于2 GB的文件。对于MSDOS文件系统尤其如此,如果没有足够的磁盘空间或分配配额,当然可以在任何文件系统上使用。

如果你展示你的代码,我们可以看看算法中是否存在任何内在缺陷,并建议替代方案。

答案 2 :(得分:-1)

Mingw是32位环境,AFAIK不存在64位变体。

mingw的fwrite()可能无法处理超过2 GB或4GB的内容,除非mingw感知大文件。

如果您能找到与truss(1)类似的内容,请在此调试工具下运行您的程序。根据您提供的信息,无法提供更好的建议。