截断内存映射文件

时间:2015-08-08 23:50:48

标签: c++ file memory boost

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

我的问题是我事先并不知道要写入的数据量,因此每个内存映射文件都是以相同的大小创建的。因此,该程序的效率较低,因为关闭时未充分使用的文件已填满零。

有没有办法在使用Boost.Iostreams或其他跨平台库(最好是boost)关闭之前截断文件?

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

1 个答案:

答案 0 :(得分:0)

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

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

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