Namespaces
Variants

std:: tmpnam

From cppreference.net
< cpp ‎ | io ‎ | c
ヘッダーで定義 <cstdio>
char * tmpnam ( char * filename ) ;

現在存在するファイルを命名していない一意のファイル名を作成し、それを filename が指す文字列に格納します。この関数は最大 TMP_MAX 個の一意のファイル名を生成できますが、一部または全てが既に使用中である可能性があり、その場合は適切な戻り値とはなりません。

std::tmpnam 静的状態を変更し、スレッドセーフである必要はありません。

目次

パラメータ

filename - 少なくとも L_tmpnam バイトを保持できる文字配列へのポインタ。結果バッファとして使用されます。ヌルポインタが渡された場合、内部静的バッファへのポインタが返されます

戻り値

filename nullポインタでない場合。それ以外の場合は、内部静的バッファへのポインタが返されます。適切なファイル名を生成できない場合は、nullポインタが返されます。

注記

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

関連項目

一時的で自動削除されるファイルを作成してオープンする
(関数)
一時ファイルに適したディレクトリを返す
(関数)