開いたファイル記述子のファイル名の作成

開いたファイル記述子のファイル名の作成

ファイルシステムにファイルがあります。open(2)ファイルのファイル記述子を取得する関数を使用してファイルを開いています。

それではファイルを削除しましょう。ただし、ファイルディスクリプタはまだあるため、最後のファイルディスクリプタが閉じられるまでファイルシステムは自分のファイルのファイル割り当てを削除しないため、問題なくファイルを読み書きできます。

ただし、ファイルを削除した後でもファイルディスクリプタが残っている間は、そのファイルディスクリプタにファイル名を再生成(再バインド)できますか?それでは、ファイルがファイルシステムに再表示され、ファイルディスクリプタを閉じても削除されませんか? (私が持っているものは開かれたファイル記述子だけで、他にはありません)。

linkat私はこれがmacOSで実行できるかどうかに最も興味があります(このフラグを使用するとLinux / glibcで可能なようですAT_EMPTY_PATH)。

答え1

あなたが述べたように、linkatLinuxでこれを行うために使用することは許可されていますが、AT_EMPTY_PATH権限を持つプロセスによってのみ可能です。 (マンページと現在の実装の間にはいくつかの違いがあります。flink「」のコミットを紹介します。そして復元するには送信してください。詳細。 )はを通じて行うことができます/proc

これmacOS バージョンlinkatこれはサポートされておらず、これを達成する他の方法はありません。

関連情報