名前空間
変種
操作

tmpnam, tmpnam_s

提供: cppreference.com
< c‎ | io
 
 
ファイル入出力
関数
ファイルアクセス
直接入出力
書式なし入出力
(C11以前)(C11およびそれ以降)
(C95)(C95)
(C95)
(C95)(C95)
(C95)
(C95)
書式付き入力
書式付き出力
ファイル位置操作
エラー処理
ファイルに対する操作
tmpnamtmpnam_s
(C11)
 
ヘッダ <stdio.h> で定義
char *tmpnam( char *filename );
(1)
errno_t tmpnam_s(char *filename_s, rsize_t maxsize);
(2) (C11およびそれ以降)
1) 有効な一意なファイル名 (長さが L_tmpnam より長くない) を作成し、それを filename の指す文字列に格納します。 この関数は一意なファイル名を最大 TMP_MAX 個生成することができますが、そのうちのいくつかはすでにファイルシステム内で使用されていて戻り値に適さない可能性があります。
2) (1) と同じですが、最大 TMP_MAX_S 個の名前を生成することができ、長さは L_tmpnam_s より長くなく、以下のエラーを実行時に検出し、現在設定されている制約ハンドラを呼びます。
  • filename_s がヌルポインタ。
  • maxsizeRSIZE_MAX より大きい。
  • maxsize が生成されたファイル名文字列より短い。
すべての境界チェック付き関数と同様に、 tmpnam_s__STDC_LIB_EXT1__ が処理系によって定義されていて、 <stdio.h> をインクルードする前にユーザが __STDC_WANT_LIB_EXT1__ を整数定数 1 に定義した場合にのみ、利用可能であることが保証されます。

tmpnam および tmpnam_s は静的な状態 (これらの関数間で共有されているかもしれません) を変更します。 スレッドセーフであることは要求されていません。

目次

[編集] 引数

filename - 結果のバッファとして使用される、少なくとも L_tmpnam バイトを保持できる文字配列を指すポインタ。 ヌルポインタが渡された場合は、内部の静的なバッファを指すポインタが返されます。
filename_s - 結果のバッファとして使用される、少なくとも L_tmpnam_s バイトを保持できる文字配列を指すポインタ。
maxsize - 関数が書き込むことができる最大文字数 (一般的には filename_s 配列のサイズ)。

[編集] 戻り値

1) filename がヌルポインタでなければ filename。 そうでなければ内部の静的なバッファを指すポインタが返されます。 適切な名前を生成できなければ、ヌルポインタが返されます。
2) 成功した場合はゼロを返し、ファイル名を filename_s に書き込みます。 エラーが発生した場合は非ゼロを返し、ヌル文字を filename_s[0] に書き込みます (filename_s がヌルでなく、 maxsize がゼロでなく RSIZE_MAX より大きくない場合のみ)。

[編集] ノート

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

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

[編集]

#include <stdio.h>
#include <string.h>
 
int main(void)
{
    char* name1 = tmpnam(NULL);
    printf("temporary file name: %s\n", name1);
 
    char name2[L_tmpnam];
    if (tmpnam(name2))
        printf("temporary file name: %s\n", name2);
}

出力例:

temporary file name: /tmp/fileRZHMwL
temporary file name: /tmp/file420gSN

[編集] 参考文献

  • C11 standard (ISO/IEC 9899:2011):
  • 7.21.4.4 The tmpnam function (p: 303-304)
  • K.3.5.1.2 The tmpnam_s function (p: 587-588)
  • C99 standard (ISO/IEC 9899:1999):
  • 7.19.4.4 The tmpnam function (p: 269-270)
  • C89/C90 standard (ISO/IEC 9899:1990):
  • 4.9.4.4 The tmpnam function

[編集] 関連項目

一時ファイルへのポインタを返します 
(関数) [edit]