Linux で使用する一時ファイルのファイル名を取得するにはどうすればよいですか?

mkstemp(3) を使用できます この目的のための関数。別の代替手段は tmpfile(3) です どちらを選択するかは、ファイルを C ライブラリ ファイル ストリームとして開くかどうかによって異なります (どの tmpfile する)、または直接ファイル記述子 (mkstemp )。 tmpfile プログラムが終了すると、関数はファイルを自動的に削除します。

これらの関数を使用する利点は、一意のファイル名の決定とファイルの作成の間の競合状態を回避できることです。たとえば、2 つのプログラムが同時に同じファイルを作成しようとすることはありません。

詳細については、両方の関数のマニュアル ページを参照してください。


問題は、一時ファイル name を生成する方法です . mkstemp も tmpfile も呼び出し元に名前を提供せず、それぞれファイル記述子またはファイル ハンドルを返します。


@garethm:

絶対にすべきではありません tmpnam を使用 .私の回答で述べた競合状態の問題に悩まされています:名前を決定してから開くまでの間に、別のプログラムがファイルまたはそのシンボリックリンクを作成する可能性があり、これは巨大なセキュリティホールです.

tmpnam マニュアルページでは、それを使用しないで mkstemp を使用するように具体的に述べています または tmpfile


No