名前空間
変種
操作

std::tmpnam

提供: cppreference.com
< cpp‎ | io‎ | c
 
 
 
 
ヘッダ <cstdio> で定義
char* tmpnam( char* filename );

現在存在するファイルの名前でない一意なファイル名を作成し、それを filename の指す文字列に格納します。 この関数は一意なファイル名を最大 TMP_MAX 個生成することができますが、そのうちのいくつかはすでに使用されていて戻り値に適さない可能性があります。

std::tmpnam は静的な状態を変更します。 スレッドセーフであることは要求されていません。

目次

[編集] 引数

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

[編集] 戻り値

filenameNULL でなければ filename。 そうでなければ内部の静的なバッファを指すポインタが返されます。 適切な名前を生成することができなければ、 NULL が返されます。

[編集] ノート

std::tmpnam によって生成される名前は推測が困難ではありますが、 std::tmpnam が戻った瞬間とプログラムがその返された名前を使用してファイルの作成を試みる瞬間の間に、別のプロセスがその名前のファイルを作成することは可能です。 標準の関数 std::tmpfile および POSIX の関数 mkstemp には、この問題がありません (標準 C ライブラリのみを使用して一意なディレクトリを作成するためには、やはり tmpnam を使用する必要があります)。

POSIX システムは、ディレクトリを選ぶことができる (デフォルトはオプションで定義されるマクロ P_tmpdir です) 似た名前の関数 tempnam() を追加で定義しています。

[編集]

#include <iostream>
#include <cstdio>
#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

[編集] 関連項目

自動的に削除される一時的なファイルを開きます
(関数) [edit]
テンポラリファイルに適したディレクトリを返します
(関数) [edit]