ファイルシステムにファイルがあります。open(2)
ファイルのファイル記述子を取得する関数を使用してファイルを開いています。
それではファイルを削除しましょう。ただし、ファイルディスクリプタはまだあるため、最後のファイルディスクリプタが閉じられるまでファイルシステムは自分のファイルのファイル割り当てを削除しないため、問題なくファイルを読み書きできます。
ただし、ファイルを削除した後でもファイルディスクリプタが残っている間は、そのファイルディスクリプタにファイル名を再生成(再バインド)できますか?それでは、ファイルがファイルシステムに再表示され、ファイルディスクリプタを閉じても削除されませんか? (私が持っているものは開かれたファイル記述子だけで、他にはありません)。
linkat
私はこれがmacOSで実行できるかどうかに最も興味があります(このフラグを使用するとLinux / glibcで可能なようですAT_EMPTY_PATH
)。
答え1
あなたが述べたように、linkat
Linuxでこれを行うために使用することは許可されていますが、AT_EMPTY_PATH
権限を持つプロセスによってのみ可能です。 (マンページと現在の実装の間にはいくつかの違いがあります。flink
「」のコミットを紹介します。そして復元するには送信してください。詳細。 )はを通じて行うことができます/proc
。
これmacOS バージョンlinkat
これはサポートされておらず、これを達成する他の方法はありません。