0
我目前使用Boost.Iostreams来映射多个文件以写出非常大的数据集。要写入的数据量因保证不会超出预定义的限制而有所不同。通常使用映射文件的全部容量,但有时不是,仅写入非常少的部分。截断内存映射文件
我的问题是,我不知道要写入的数据量,所以每个内存映射文件都是以相同的大小创建的。因此,该程序效率较低,因为尚未使用完整容量的文件在关闭时不会被填满。
有没有在关闭之前使用Boost.Iostreams或其他跨平台库(最好是boost)截断文件的方法?
我知道还有其他类似的问题,但我不相信他们提供了跨平台解决方案。
感谢您的信息,但这些工作将使用Boost.Iostreams目前映射的文件?我真的在跨平台解决方案后,但如果这是兼容的,那么我可以写一个Windows的_chsize包装。 – josh247
我对Boost库不熟悉。 truncate()适用于任何常规打开的文件描述符。你将不得不做任何需要做的事情来取消映射文件。我确信Boost必须为您提供获取底层文件描述符的方法。 –
看起来好像只了Boost.Iostreams支持固定大小的内存映射文件,并不能给出一个文件描述符。我将不得不使用mmap,mumap和ftruncate编写一个包装器来处理unix和windows系统上的事情。谢谢您的帮助。 – josh247