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