其实我有两个问题。
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相关问题。

07-26 02:17