一般的なシステムコールインターフェイスを使用すると、ファイルサイズを小さくできますか(別のinodeに置き換えることなく)?

一般的なシステムコールインターフェイスを使用すると、ファイルサイズを小さくできますか(別のinodeに置き換えることなく)?

open()ファイルを小さくする方法はありますか?もちろん、追加モードで開くことも、最後までナビゲートして成長させることもできます。しかし、私が知っている限り、一般的なUnixスタイルのシステムコールインターフェイスを介してファイルを縮小する方法はありません。

私が知っている限り、これを行う唯一の方法は、より短い新しいファイルを作成し、古いrename()ファイルを置き換えて偽にすることです。

ちょうどその場で新しいファイルを作成し、名前を変更するプロセスを経ずに、ファイルから直接動作するファイルエディタを作成することが可能であるという答えを見て確認したかったです。

私はいつもlibcのファイルAPIとUnixスタイルのシステムコールインターフェイスがファイルシステムの実装を簡素化し、断片化につながる可能性がある使用パターンを避けるためにファイルを縮小することを許可していないと思いました。

ベストアンサー1

man -s 2 ftruncate説明する

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.

...

CONFORMING TO
   POSIX.1-2001, POSIX.1-2008, 4.4BSD, SVr4 (these calls first appeared in 4.2BSD).

引き続き ftruncate では書き込み用にファイルを開く必要があり、 truncate ではファイルを書き込むことができる必要があると言います。

おすすめ記事