これは実際にはキャッシングとは何の関係もありません。むしろ、Unixファイルシステムの動作方法が原因で動作します。ファイルが開かれると、そのiノードが読み取られ、データがディスク上のどこにあるかが示されます。ファイルが移動または削除されると(「リンク解除」)、iノードは新しい場所に移動されるか、ディレクトリから削除されます。ただし、それが指すデータは、そのiノードへの参照が存在しなくなるまで無効になりません。つまり、ファイルが開いたままである限り、ファイルを削除または移動しても、そのファイルを読み取るプログラムには影響しません。
これは、Windowsファイルシステムの動作方法ではありません。つまり、使用中のファイルを削除しようとすると、一般的な「ファイルがロックされている」という問題が発生します。(免責事項:これは、ハードリンクをサポートするNTFSには当てはまらない可能性がありますが、FATの場合は確かにそうでした。)
それは非常にうまく機能するので、プログラムがファイルを作成し、ファイルを開いたままですぐに「削除」することによって、それ自体の後で自動的にクリーンアップするトリックを使用することさえあります。そうすれば、プログラムが完了するまで一時ファイルを使用し続けることができ、プログラムが完了すると、一時ファイルは自動的に「消えます」。
ちなみに、一時ファイルを閉じて再度開くことができると期待しているプログラムは、移動すると混乱します。ハードリンクを使用して「コピー」を作成することで、これを回避できます。
ln /tmp/Fl* .
このコマンドは、一時ファイル用にFlashによって参照されるiノードのコピーを現在のディレクトリに作成します。実際にはファイルの内容をコピーするのではなく、ディスク上の同じデータへの2番目の参照を作成するだけです。そうすれば、Flashが閉じても、リリースされたデータへの「ポインター」が残ります。
私はしばらくこのトピックを研究しておらず、いくつかの用語が間違っている可能性があるので、さらに理解したい場合は、iノードとハードリンクの仕組みを読んでください。
そのウィキペディアのリンクから:
リンクを解除するプロセスでは、関連付けられたデータを破棄せずに、ボリューム上のデータから名前の関連付けを解除します。データを指すリンクが少なくとも1つ存在する限り、データには引き続きアクセスできます。最後のリンクが削除されると、スペースは空きと見なされます。