我目前正在使用Boost.Iostreams来存储映射多个文件以写出非常大的数据集。要写入的数据量不同,保证不会超过预定义的限制。通常使用映射文件的完整容量,但有时不使用,只写入很小的部分。
我的问题是我事先并不知道要写入的数据量,因此每个内存映射文件都是以相同的大小创建的。因此,该程序的效率较低,因为关闭时未充分使用的文件已填满零。
有没有办法在使用Boost.Iostreams或其他跨平台库(最好是boost)关闭之前截断文件?
我知道还有其他类似问题,但我不认为他们提供跨平台解决方案。
答案 0 :(得分:0)
您可以使用truncate(2)
或ftruncate(2)
系统调用来截断现有文件的大小。
请注意,在截断之前,应使用munmap()
文件。如果查看mmap(2)
手册页的内容,则会记录截断mmap-ed文件的行为是未定义的。
但是,在截断文件之前munmap()
文件不应该破坏任何规则。