其实我有两个问题。fallocate()
是什么?
我阅读了手册页,并具有以下理解。对于支持文件中漏洞的文件系统,fallocate()
用于打孔并在文件中分配新空间。对于没有空洞的文件系统,fallocate()
仅可用于在文件结束后分配新空间,即,仅当len + offset > file_size
时才有效。
我的理解正确吗?如果是这样,我还有以下问题。
扩展文件时的fallocate()
与ftruncate()
现在,我想创建一个新文件,并在文件中分配零填充字节的特定大小。我意识到fallocate()
和ftruncate()
都能胜任。他们有什么区别?
顺便说一句,我知道fallocate()
不能移植,但是由于我的程序仅适用于Linux,因此没有考虑移植到其他类似Unix的系统。
谢谢!
最佳答案
在代码中使用posix_fallocate(3)。 ftruncate(2)的不同之处在于(在支持它的文件系统上,例如Ext4)磁盘空间确实是由posix_fallocate
保留的,但是ftruncate
通过添加空洞(并且不保留磁盘空间)来扩展文件。
例如。如果您的磁盘是100GB,并且posix_fallocate
一个5Gb文件,您将看到(使用df
)可用空间减少了(因为在调用之前);如果仅执行ftruncate
,则不会看到可用空间减少。
另请参阅this answer相关问题。