LinuxプラットフォームでC ++で書き込むための一時ファイルを作成するにはどうすればよいですか?
-
03-07-2019 - |
質問
C ++、Linuxでは、一時ファイル名を返す関数を作成して、書き込み用に開くことができますか?
同じ関数を使用する別のプロセスが同じ名前を取得しないように、ファイル名はできるだけ一意である必要があります。
解決
標準ライブラリの「mktemp」のいずれかを使用します関数: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()のみを使用する必要があります。
man tmpfile
tmpfile()関数は、一意の一時ファイルをバイナリで開きます 読み取り/書き込み(w + b)モード。ファイルは自動的に削除されます が閉じられるか、プログラムが終了します。
mktempは機能するか、利用可能な多数のライブラリの1つを取得してUUIDを生成します。
C標準ライブラリの tmpnam()関数はこの問題を解決するように設計されています。 tmpfile()もあります。これは、開いているファイルハンドルを返します(閉じたときに自動的に削除します)。
書き込もうとしているファイルがすでに存在するかどうかを確認するだけです。 これはロックの問題です。 ファイルには所有者もいるため、正しく実行している場合は、間違ったプロセスがファイルに書き込むことができません。