2

http://pubs.opengroup.org/onlinepubs/7908799/xsh/ftruncate.html的描述来看,ftruncate 的工作原理还不是很清楚。

如果假设,我将文件截断为 1GB,然后截断为 2GB。如果 ftruncate 在旧的 1GB 之后没有找到额外的 1GB 空间,它是否会将数据复制到新位置以保持文件连续?

4

2 回答 2

2

这些文件从一开始就不是连续的。使用树状结构的块图,因此只需向地图添加更多块。

此外,虽然 Posix 并不要求这样做,但所有真正的类 Unix 系统都支持稀疏文件因此大多数情况下它只需要增加长度而不实际添加块。稍后的读取将注意到(在内核内部)缺少支持块,并且内核将知道只返回零。稍后对未支持区域的写入自然需要最终开始分配块。

于 2013-06-13T17:45:53.740 回答
1

文件系统提供对块设备的间接性,块设备也可以有层和间接性。磁盘也提供间接性。

实际上,这些文件在第一个ftruncate.

如果您的目标是保持数据连续,您可以在mkfsmount. 此外,ftruncate您也可以尝试fallocate(或posix_fallocate)。

于 2013-06-13T17:52:30.370 回答