繁体   English   中英

用C写大二进制文件

[英]Write large binary file in C

我正在使用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

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

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

如果您展示代码,我们可以看到算法中是否存在任何内在缺陷并提出替代方案。

Mingw是一个32位环境,有AFAIK不存在64位变种。

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

如果你能找到类似于truss(1)东西,可以在这个调试工具下运行你的progran。 根据您提供的信息,无法提供更好的建议。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM