[英]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.