什么fallocate()呢?

时间:2014-04-02 18:36:13

标签: c linux unix filesystems

实际上,我有两个问题。

fallocate()做什么?

我阅读了手册页并有以下理解。对于支持文件中的漏洞的文件系统,fallocate()用于打孔并在文件中分配新空格。对于没有漏洞的文件系统,fallocate()只能用于在文件结束后分配新空间,即它仅在len + offset > file_size时生效。

我的理解是否正确?如果是这样,我也有以下问题。

扩展文件时,

fallocate() vs ftruncate()

现在我想创建一个新文件,并在文件中分配一个特定大小的零填充字节。我意识到fallocate()ftruncate()都可以完成这项工作。他们的区别是什么?

BTW,我知道fallocate()不可移植,但由于我的程序仅适用于Linux,因此不考虑其他类Unix系统的可移植性。

谢谢!

1 个答案:

答案 0 :(得分:4)

在代码中使用posix_fallocate(3)。与ftruncate(2)的区别在于(在支持它的文件系统上,例如Ext4)磁盘空间确实由posix_fallocate保留,但ftruncate通过添加孔扩展文件(并且不保留磁盘空间)

E.g。如果您的磁盘是100Gbytes,并且posix_fallocate是5Gb文件,您将看到(带有df)可用空间减少(自呼叫之前);如果你只做ftruncate,你就不会看到可用的空间减少。

另请参阅this answer相关问题。