在开发过程中有时候需要为某个文件快速地分配固定大小的磁盘空间,为什么要这样做呢?
(1)可以让文件尽可能的占用连续的磁盘扇区,减少后续写入和读取文件时的磁盘寻道开销;
(2)迅速占用磁盘空间,防止使用过程中所需空间不足。
具体的例子有windows下的Bt下载服务,或者一些基于固定大小文件块的存储系统(如QFS)。
为某个文件预分配磁盘空间必须是实际的占用磁盘空间,以Linux来说,使用lseek或truncate到一个固定位置生成的“空洞文件”是不会占据真正的磁盘空间的。
快速的为某个文件分配实际的磁盘空间在Linux下可通过fallocate(对应的posix接口为posix_fallocate)系统调用来实现,当前支持ext4/xfs。
windows 下可通过SetFilePointer() 和SetEndOfFile()或者SetFileValidData()实现。