Provided by: manpages-ja-dev_0.5.0.0.20161015+dfsg-1_all bug

名前

       tmpnam, tmpnam_r - 一時ファイルの名前を作成する

書式

       #include <stdio.h>

       char *tmpnam(char *s);

説明

       注意: tmpnam() の使用は避けること。代わりに mkstemp(3) か tmpfile(3) を使うこと。

       tmpnam()   関数は、ファイル名に使える文字列へのポインターを返す。 ある時点では同じ名前を持
       つファイルが存在しないファイル名が返されるので、  幼稚なプログラマはこの文字列が一時ファイ
       ルのファイル名として  適していると考えるかもしれない。 引き数 s が NULL なら、この名前は内
       部の静的バッファーに作成され、 次に  tmpnam()  関数が呼び出された時に上書きされる。  s  が
       NULL でなければ、ファイル名は s が指す (少なくとも L_tmpnam の長さを持つ) 文字配列にコピー
       され、 成功した場合は s が返される。

       作成されるパス名は、ディレクトリの部分に  P_tmpdir  が使われる。  (L_tmpnamP_tmpdir
       は、以下で説明する TMP_MAX 同様 <stdio.h> で定義されている。)

返り値

       tmpnam()    関数は一意な一時ファイル名へのポインターを返す。  一意なファイル名が作成できな
       かった場合は NULL を返す。

エラー

       エラーは定義されていない。

属性

   マルチスレッディング (pthreads(7) 参照)
       tmpnam()  関数は例外付きでスレッドセーフである。  NULL  パラメーターで呼び出された場合はス
       レッドセーフではない。

       tmpnam_r() 関数はスレッドセーフである。

準拠

       SVr4, 4.3BSD, C89, C99, POSIX.1-2001.  POSIX.1-2008 は tmpnam() を廃止予定としている。

注意

       tmpnam()  関数は最大 TMP_MAX 回まで、呼び出される度に異なる文字列を作成する。 TMP_MAX 回以
       上呼び出された場合、その動作は実装依存である。

       tmpnam()  は推測が難しい名前を生成するが、それにもかかわらず、 tmpnam() がパス名を返してか
       ら、プログラムがそのファイルをオープンする  までの間に、別のプログラムが同じパス名で、ファ
       イルを open(2) で作成したり、シンボリックリンクを作成したりする可能性がある。 これはセキュ
       リティホールにつながる可能性がある。   そのような可能性を回避するためには、   open(2)   の
       O_EXCL   フラグを使ってパス名をオープンすればよい。   もっといいのは、   mkstemp(3)     や
       tmpfile(3)  を使うことである。

       移植性が必要な、スレッドを使ったアプリケーションでは、          _POSIX_THREADS_POSIX_THREAD_SAFE_FUNCTIONS が定義されている場合に、 tmpnam()  関数を NULL 引き数で呼び出
       してはならない。

       POSIX 草案では、関数 tmpnam_r()  を使うことを提案している。 この関数は、以下のように定義さ
       れており、 NULL を使わないようにという警告の意味で NULL を別扱いしている。

           char *
           tmpnam_r(char *s)
           {
               return s ? tmpnam(s) : NULL;
           }

       数は少ないが、この関数を実装しているシステムもある。  この関数の  glibc   のプロトタイプを
       <stdio.h>       から得るには、      (「どの」ヘッダーファイルをインクルードするよりも前に)
       _SVID_SOURCE_BSD_SOURCE を定義しておく必要がある。

バグ

       決してこの関数を使ってはならない。代わりに mkstemp(3)  か tmpfile(3)  を使うこと。

関連項目

       mkstemp(3), mktemp(3), tempnam(3), tmpfile(3)

この文書について

       この man ページは Linux man-pages プロジェクトのリリース 3.79 の一部  である。プロジェクト
       の説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。

                                            2014-02-27                                  TMPNAM(3)