其实我有两个问题。
fallocate()
做什么?
我阅读了手册页并有以下理解。对于支持文件打洞的文件系统,fallocate()
用于打洞并在文件中分配新空间。对于没有漏洞的文件系统,fallocate()
只能用于在文件结束后分配新空间,即只有在len + offset > file_size
时才有效。
我的理解对吗?如果是这样,我也有以下问题。
fallocate()
vs ftruncate()
扩展文件
现在我想创建一个新文件并在文件中分配特定大小的零填充字节。我意识到 fallocate()
和 ftruncate()
都可以完成这项工作。它们有什么区别?
顺便说一句,我知道 fallocate()
不可移植,但由于我的程序仅适用于 Linux,因此没有考虑到其他类 Unix 系统的可移植性。
谢谢!
最佳答案
使用posix_fallocate(3)在你的代码中。与 ftruncate(2) 的区别是(在支持它的文件系统上,例如 Ext4)磁盘空间确实由 posix_fallocate
保留,但是 ftruncate
通过添加孔(并且不保留磁盘空间)扩展文件。
例如如果您的磁盘是 100Gbytes,并且您posix_fallocate
一个 5Gb 文件,您将看到(使用 df
)可用空间已经减少(自调用之前);如果您只执行 ftruncate
,您不会看到可用空间减少。
另见 this answer一个相关的问题。
关于c - fallocate() 做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22820139/