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