实际上,我有两个问题。
fallocate()
做什么?我阅读了手册页并有以下理解。对于支持文件中的漏洞的文件系统,fallocate()
用于打孔并在文件中分配新空格。对于没有漏洞的文件系统,fallocate()
只能用于在文件结束后分配新空间,即它仅在len + offset > file_size
时生效。
我的理解是否正确?如果是这样,我也有以下问题。
扩展文件时,fallocate()
vs ftruncate()
现在我想创建一个新文件,并在文件中分配一个特定大小的零填充字节。我意识到fallocate()
和ftruncate()
都可以完成这项工作。他们的区别是什么?
BTW,我知道fallocate()
不可移植,但由于我的程序仅适用于Linux,因此不考虑其他类Unix系统的可移植性。
谢谢!
答案 0 :(得分:4)
在代码中使用posix_fallocate(3)。与ftruncate(2)的区别在于(在支持它的文件系统上,例如Ext4)磁盘空间确实由posix_fallocate
保留,但ftruncate
通过添加孔扩展文件(并且不保留磁盘空间)
E.g。如果您的磁盘是100Gbytes,并且posix_fallocate
是5Gb文件,您将看到(带有df
)可用空间减少(自呼叫之前);如果你只做ftruncate
,你就不会看到可用的空间减少。
另请参阅this answer相关问题。