有没有办法让open()
文件缩小?当然,可以在追加模式下打开它们或寻找到最后并写入以导致它们增长。但是,据我所知,没有办法通过典型的 Unix 风格的系统调用接口来缩小文件。
据我所知,唯一的方法是通过创建一个新的较短的文件并rename()
代替旧文件来伪造它。
我只是想确认一下,因为我看到一个答案暗示可以制作直接处理文件的文件编辑器,而不是经历制作新文件并在适当位置重命名的过程。
我一直认为 libc 和 unix 风格的系统调用接口中的文件 api 不允许缩小文件以简化文件系统的实现,并可能避免可能导致碎片化的使用模式。
ica*_*rus 22
DESCRIPTION
The truncate() and ftruncate() functions cause the regular file
named by path or referenced by fd to be truncated to a size of precisely
length bytes.
Run Code Online (Sandbox Code Playgroud)
...
CONFORMING TO
POSIX.1-2001, POSIX.1-2008, 4.4BSD, SVr4 (these calls first appeared in 4.2BSD).
Run Code Online (Sandbox Code Playgroud)
它继续说,如果您使用 ftruncate,您必须打开文件进行写入,如果您使用 truncate,则该文件必须是可写的。