この機能を使用して作成された一時ファイルを使用するプログラムがありますmkstemps
。これらのファイルは/tmp
ディレクトリ内に作成されます。
プログラムが終了すると、これらのファイルは自動的に削除されますか?
私のプログラムが終了する前にこれらのファイルを削除する必要があるかどうかを知りたいです。自動的に削除されない場合は削除せずに保存できますか/tmp
?それとも、プログラムが終了する前に使用または削除する方がunlink
良い方法ですか?remove
答え1
次のいずれかによって生成されたファイルmkstemp
関数系列プログラム終了時に自動的に削除されません。内容に合わせて保存することを選択できます/tmp
。これは通常定期的にクリーンアップされますが、これはやや恥ずかしいことです。
この問題をきれいに処理する2つの主な方法があります。
- 別のプロセスで一時ファイルを開く必要がない場合、またはファイル記述子を渡してそれを処理できる場合は、返すとすぐに
mkstemps
ファイルを削除できます。ファイルは存在しますが、表示されなくなります。ディレクトリのリスト。ファイル記述子が見つかるとclose
削除されます。 atexit
それ以外の場合は、ファイルを削除するためのシャットダウン機能を登録してください。
答え2
open(O_CREAT)
などを使用して作成したらすぐに削除する必要があり、返されたファイル記述子を介してのみ使用する必要があります。
このようなより高いレベルのインターフェースはtmpfile(3)
これを行うことができ、例えばO_TMPFILE
Linuxでより良いアプローチを使用することができます。オープン(2)マンページに記載されている)
削除する前にプログラムが異常終了する可能性があるため、「終了する前に」削除することは間違っています。