有没有办法让open()
文件缩小?当然,可以以附加模式打开它们,或者寻找到最后并写入以使它们增长。但是,据我所知,没有任何方法可以通过典型的 unix 风格的系统调用接口来缩小文件。
据我所知,这样做的唯一方法是通过创建一个新的较短文件并将rename()
其替换旧文件来伪造它。
我只是想确认一下,因为我看到一个答案暗示可以制作直接在文件上工作的文件编辑器,而不是经历制作新文件并在适当位置重命名的过程。
我一直认为 libc 和 unix 风格的系统调用接口中的文件 api 不允许缩小文件以简化文件系统的实现,并且可能避免可能导致碎片的使用模式。
man -s 2 ftruncate
说...
它接着说,如果你使用 ftruncate,你必须打开文件进行写入,如果你使用 truncate,文件必须是可写的。
open(2)
系统调用接受可以减小文件大小的标志O_TRUNC
:当程序旨在完全覆盖文件的内容时,经常使用它。一个示例是您的 shell 的文件重定向运算符,如
command > file
.