長時間実行されるプロセスがログ ファイルに書き込むとします。ログ ファイルが無期限に開かれているとします。不注意なシステム管理者がそのログ ファイルを削除したとします。プログラムはこれが発生したことを検出できますか?
fstat()
削除されたファイルのリンク数が 0 と報告されると想定しても安全ですか?
切り捨ては、私には少し難しいようです。一部は、ファイル記述子がO_APPEND
モードで実行されているかどうかによって異なります。ログ ファイルが で実行されていない場合O_APPEND
、プログラムのログ記述子の現在の書き込み位置は変更されず、切り捨てによって先頭のバイトが削除されますが、プログラムは「最後」に書き込みを続け、幻のゼロのギャップが残ります。バイト (ゼロとして読み取られますが、必ずしもディスク上のスペースを占有するとは限りません)。
プログラムが で実行O_APPEND
される場合、現在存在するファイルの最後に書き込みます。切り捨てを観察する唯一の方法は、ファイルの位置がプログラムが予期した場所ではないことに注意することです。これは、その位置を明示的に追跡することを意味します。
全体として、切り捨てについては削除ほど心配していませんが、どんな考えでも大歓迎です。