Linux の C++ で、書き込み用に開くことができる一時ファイル名を返す関数を作成するにはどうすればよいですか?
同じ関数を使用する別のプロセスが同じ名前を取得しないように、ファイル名はできるだけ一意にする必要があります。
Linux の C++ で、書き込み用に開くことができる一時ファイル名を返す関数を作成するにはどうすればよいですか?
同じ関数を使用する別のプロセスが同じ名前を取得しないように、ファイル名はできるだけ一意にする必要があります。
標準ライブラリの「mktemp」関数の1つであるmktemp/mkstemp / mkstemps/mkdtempを使用します。
編集:プレーンなmktempは安全でない可能性があります-mkstempが推奨されます。
tmpnam()、または名前を付けるものはすべて、競合状態に対して脆弱になります。tmpfile()など、ハンドルを返すこの目的のために設計されたものを使用します。
#include <stdio.h>
FILE *tmpfile(void);
GNU libcマニュアルでは、利用可能なさまざまなオプションとその注意事項について説明しています。
http://www.gnu.org/s/libc/manual/html_node/Temporary-Files.html
簡単に言うと、他の人が述べているように、mkstemp()またはtmpfile()のみを使用する必要があります。
男tmpfile
tmpfile()関数は、バイナリ読み取り/書き込み(w + b)モードで一意の一時ファイルを開きます。ファイルを閉じるか、プログラムが終了すると、ファイルは自動的に削除されます。
mktempが機能するか、UUIDを生成するために利用可能な多数のライブラリの1つを取得する必要があります。
C標準ライブラリのtmpnam()関数は、この問題を解決するように設計されています。開いているファイルハンドルを返す(閉じたときに自動的に削除する)tmpfile()もあります。
書き込もうとしているファイルが既に存在するかどうかを確認するだけです。これはロックの問題です。ファイルにも所有者がいるため、正しく実行していれば、間違ったプロセスがファイルに書き込むことはできません。