在開發過程中有時候需要爲某個文件快速地分配固定大小的磁盤空間,爲什麼要這樣做呢?
(1)可以讓文件儘可能的佔用連續的磁盤扇區,減少後續寫入和讀取文件時的磁盤尋道開銷;
(2)迅速佔用磁盤空間,防止使用過程中所需空間不足。
具體的例子有windows下的Bt下載服務,或者一些基於固定大小文件塊的存儲系統(如QFS)。
爲某個文件預分配磁盤空間必須是實際的佔用磁盤空間,以Linux來說,使用lseek或truncate到一個固定位置生成的“空洞文件”是不會佔據真正的磁盤空間的。
快速的爲某個文件分配實際的磁盤空間在Linux下可通過fallocate(對應的posix接口爲posix_fallocate)系統調用來實現,當前支持ext4/xfs。
windows 下可通過SetFilePointer() 和SetEndOfFile()或者SetFileValidData()實現。