根据我的测试,他们都可以改变文件大小。
为什么他们都可以将文件变大或变短?
Fallocate 和 ftruncate 和有什么区别?
ftruncate
是一个简单的、单一用途的函数。根据 POSIX 文档 http://pubs.opengroup.org/onlinepubs/9699919799/functions/ftruncate.html,它只是将文件设置为请求的长度:
If fildes
指的是常规文件,ftruncate()
函数应导致文件的大小被截断为length
. ...
ftruncate()
也是一个标准的 POSIX 函数并且是可移植的。注意 POSIX 没有指定how操作系统设置文件长度,例如设置为任意长度的文件是否是稀疏文件 https://en.wikipedia.org/wiki/Sparse_file.
fallocate()是Linux特有的函数 http://man7.org/linux/man-pages/man2/fallocate.2.html它以非常具体的方式做了更多的事情:
分配磁盘空间
Fallocate() 的默认操作(即模式为零)分配
指定范围内的磁盘空间offset
and len
。这
文件大小(由报告)stat(2)
)将被改变,如果offset+len
是
大于文件大小。指定范围内的任何子区域
通过 offset 和 len 在调用之前不包含数据
初始化为零。这种默认行为非常类似于
的行为posix_fallocate(3)
库函数,目的是
作为最佳实现该功能的方法。
...
解除分配文件空间
指定FALLOC_FL_PUNCH_HOLE
标志(自 Linux 起可用)
2.6.38) 在模式下释放字节中的空间(即创建一个洞)
范围起始于offset
并继续为len
字节。内
指定范围,部分文件系统块被清零,整个文件系统块被清零
文件系统块已从文件中删除。成功后
调用,后续从此范围读取将返回零。
...
文件空间崩溃
指定FALLOC_FL_COLLAPSE_RANGE
标志(自 Linux 起可用)
3.15) in mode 从文件中删除一个字节范围,而不留下
洞。要折叠的字节范围开始于offset
并继续
为了len
字节。操作完成后,内容
从该位置开始的文件offset+len
将附加在
位置偏移量,文件将是len
字节更小。
...
将文件空间清零
指定FALLOC_FL_ZERO_RANGE
标志(自 Linux 3.15 起可用)
在模式下,将字节范围内的空间清零,起始位置为offset
和
继续为len
字节。在指定范围内,块是
为跨越文件中的漏洞的区域预先分配。后
成功调用,随后从此范围读取将返回
零。
...
增加文件空间
指定FALLOC_FL_INSERT_RANGE
标志(自 Linux 起可用)
4.1) in 模式通过在文件内插入一个洞来增加文件空间
文件大小,而不覆盖任何现有数据。洞将开始
在offset
并继续len
字节。将孔插入内部时
文件,文件的内容从offset
将被转移
向上(即,到更高的文件偏移量)len
字节。插入一个
文件内的洞会增加文件大小len
bytes.
...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)