首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >fallocate和ftruncate的区别是什么?

fallocate和ftruncate的区别是什么?
EN

Stack Overflow用户
提问于 2018-03-19 18:41:23
回答 4查看 3.3K关注 0票数 4

它们都可以根据我的测试更改文件大小。为什么他们都可以将文件更改为更大或更短?fallocate和ftruncate有什么区别?

EN

回答 4

Stack Overflow用户

发布于 2018-03-19 19:30:13

ftruncate是一个简单的、用途单一的函数。Per the POSIX documentation,它只是将文件设置为请求的长度:

如果fildes引用常规文件,则ftruncate()函数将导致文件的大小被截断为length。..。

ftruncate()也是一个标准的POSIX函数,并且是可移植的。注意,POSIX没有指定OS如何设置文件长度,比如设置为任意长度的文件是否为a sparse file

fallocate() is a Linux-specific function做了更多的事情,而且是以非常具体的方式:

分配磁盘空间

fallocate()的默认操作(即模式为零)在offsetlen指定的范围内分配磁盘空间。如果offset+len大于文件大小,则会更改文件大小(由stat(2)报告)。在offset和len指定的范围内,调用前未包含数据的任何子区域将被初始化为零。此默认行为与posix_fallocate(3)库函数的行为非常相似,旨在作为以最佳方式实现该函数的方法。

..。

释放文件空间

在模式下指定FALLOC_FL_PUNCH_HOLE标志(从Linux2.6.38开始可用)将释放字节范围中的空间(即,创建一个空洞),从offset开始,一直到len字节。在指定范围内,将部分文件系统块归零,并从文件中删除整个文件系统块。调用成功后,此范围的后续读取将返回零。

..。

折叠文件空间

在模式下指定FALLOC_FL_COLLAPSE_RANGE标志(从Linux3.15开始可用)将从文件中删除一个字节范围,而不会留下空洞。要折叠的字节范围从offset开始,一直到len字节。操作完成时,从位置偏移量开始的文件的内容将被附加到位置偏移量,并且文件将小len个字节。

..。

零位调整文件空间

在模式中指定FALLOC_FL_ZERO_RANGE标志(从Linux3.15开始可用)将从offset开始到len字节的字节范围内的空间置零。在指定的范围内,将为跨越文件中孔的区域预先分配块。调用成功后,此范围的后续读取将返回零。

..。

增加文件空间

在模式下指定FALLOC_FL_INSERT_RANGE标志(从Linux4.1开始可用)会增加文件空间,方法是在文件大小内插入一个洞,而不会覆盖任何现有数据。该漏洞将从offset开始,并在len字节处继续。在文件内插入孔时,从offset开始的文件内容将向上移动(即,到更高的文件偏移量) len字节。在文件中插入一个洞会使文件大小增加len字节。

...

票数 7
EN

Stack Overflow用户

发布于 2018-03-19 21:36:54

fallocate用于将数据块预分配给文件

以下命令将分配一个大小为1 1GB的文件。

代码语言:javascript
复制
fallocate -l 1G test_file1.img

ftruncate -将文件设置为指定的长度

代码语言:javascript
复制
ftruncate(fileno(fout),size);
票数 0
EN

Stack Overflow用户

发布于 2018-03-20 13:57:27

据我所知:

1. 1.fallocate无法将文件更改为更短。它会向文件添加实际空间。

2.ftruncate将len添加到"describe“中,就像声明一样。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49360932

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档