std::tmpnam
From cppreference.com
| ヘッダ <cstdio>で定義 |
||
| char* tmpnam( char* filename ); |
||
現在存在しない一意のファイル名を作成し、filename が指す文字文字列に格納します。この関数は最大 TMP_MAX 個の一意のファイル名を生成できますが、それらのいくつまたはすべてが既に使用中である可能性があり、そのため適切な戻り値にならない場合があります。
std::tmpnam は静的状態を変更するため、スレッドセーフである必要はありません。
目次 |
[編集] パラメータ
| filename | - | 結果バッファとして使用する、少なくとも L_tmpnam バイトを保持できる文字配列へのポインタ。ヌルポインタが渡された場合、内部の静的バッファへのポインタが返されます。 |
[編集] 戻り値
filename がヌルポインタでなかった場合は filename。それ以外の場合は、内部の静的バッファへのポインタが返されます。適切なファイル名を生成できなかった場合は、ヌルポインタが返されます。
[編集] 注記
std::tmpnam によって生成される名前は推測が困難ですが、std::tmpnam が返した時点と、このプログラムが返された名前を使用してファイルを作成しようとする時点の間に、その名前のファイルが別のプロセスによって作成される可能性があります。標準関数 std::tmpfile および POSIX 関数 mkstemp はこの問題を抱えていません(標準 C ライブラリのみを使用して一意のディレクトリを作成するには、依然として tmpnam の使用が必要です)。
POSIX システムは、同様の名前の関数 tempnam も定義しており、ディレクトリ(オプションで定義されるマクロ P_tmpdir でデフォルト化される)を選択できます。
[編集] 例
このコードを実行
#include <cstdio> #include <iostream> #include <string> int main() { std::string name1 = std::tmpnam(nullptr); std::cout << "temporary file name: " << name1 << '\n'; char name2[L_tmpnam]; if (std::tmpnam(name2)) std::cout << "temporary file name: " << name2 << '\n'; }
実行結果の例
temporary file name: /tmp/fileDjwifs temporary file name: /tmp/fileEv2bfW
[編集] 関連項目
| 一時的で自動的に削除されるファイルを作成し、開く (関数) | |
| (C++17) |
一時ファイルに適したディレクトリを返す (関数) |
| C ドキュメント (tmpnam 用)
| |