实际上,我有两个问题。
fallocate()做什么?
我阅读了手册页,并有以下的理解。对于支持文件孔的文件系统,fallocate()用于打孔并在文件中分配新的空间。对于没有漏洞的文件系统,fallocate()只能用于在文件结束后分配新的空间,也就是说,只有在len + offset > file_size时才有效果。
我的理解正确吗?如果是这样,我也有以下问题。
扩展文件时fallocate()与ftruncate()的比较
现在,我想要创建一个新文件,并在文件中分配一个特定大小的零填充字节。我意识到fallocate()和ftruncate()都能胜任这项工作。他们有什么区别?
顺便说一句,我知道fallocate()不是可移植的,但是由于我的程序只用于Linux,所以没有考虑到移植到其他类Unix系统的可能性。
谢谢!
发布于 2014-04-02 18:40:28
在代码中使用假定位(3)。命运截断(2)的不同之处在于(在支持它的文件系统上,例如Ext4),磁盘空间确实是由posix_fallocate保留的,但是ftruncate通过添加漏洞(并且不保留磁盘空间)扩展文件。
例如,如果您的磁盘是100 G字节,并且posix_fallocate是一个5Gb文件,那么您将看到(使用df)可用空间已经减少(从调用之前开始);如果您只执行了一个ftruncate,则不会看到可用空间减少。
另见这个答案中的相关问题。
https://stackoverflow.com/questions/22820139
复制相似问题