繁体   English   中英

截断内存映射文件

[英]Truncating a memory mapped file

我目前正在使用Boost.Iostreams内存映射多个文件,以写出非常大的数据集。 要写入的数据量会有所不同,并保证不会超出预定义的限制。 通常,使用映射文件的全部容量,但有时不使用,仅写入很小的一部分。

我的问题是,我事先不知道要写入的数据量,因此每个内存映射文件都是以相等的大小创建的。 结果,该程序效率较低,因为在关闭时尚未完全使用的文件将被零填充。

有没有一种方法可以使用Boost.Iostreams或另一个跨平台库(最好是boost)在关闭之前截断文件?

我知道还有其他类似的问题,但我不认为它们提供了跨平台的解决方案。

您可以使用truncate(2)ftruncate(2)系统调用来截断现有文件的大小。

请注意,该使用应在截断之前先对文件进行munmap() 。如果查看mmap(2)手册页的内容,则该文件说明截断mmap-ed文件是未定义的行为。

但是,在将文件截断之前munmap()处理不应破坏任何规则。

暂无
暂无

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

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