plucky (3) tempnam.3.gz

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

名前

       tempnam - テンポラリファイルの名前を作成する

書式

       #include <stdio.h>

       char *tempnam(const char *dir, const char *pfx);

   glibc 向けの機能検査マクロの要件 (feature_test_macros(7)  参照):

       tempnam():
           Since glibc 2.19:
               _DEFAULT_SOURCE
           Glibc 2.19 and earlier:
               _BSD_SOURCE || _SVID_SOURCE

説明

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

       tempnam()     関数はファイル名として正しい文字列へのポインターを返す。   このファイル名を持つファイルは、
       tempnam() がチェックした時点においては存在しない (しなかった)。 pfx が NULL でない 5 バイト以内の文字列で
       あれば、 生成されるパス名のうちのファイル名の部分は pfx から始まるものになる。 生成されるディレクトリの部
       分は、「適切」でなければならない (大抵の場合、「適切」であるためにはまず少なくとも 書き込み可能でなければ
       ならない)。

       適切なディレクトリの探索は、以下の手順にしたがって行われる。

       a) 環境変数 TMPDIR が設定されていて、 その内容が適切なディレクトリの名前なら、それを用いる。

       b) それ以外の場合、 dir 引数が NULL でない文字列でかつ適切なら、それを用いる。

       c) それ以外の場合、 (<stdio.h> で定義されている)  P_tmpdir が適切なら、それを用いる。

       d) 最後に実装で定義されたディレクトリが用いられることになる。

       tempnam()  が返す文字列は malloc(3)  を使って確保される。そのため、 free(3)  で解放すべきである。

返り値

       成功すると tempnam()  関数は、一意なテンポラリファイル名へのポインターを返す。 一意な名前が生成できなけれ
       ば NULL を返し、 errno にエラーの原因を示す値を設定する。

エラー

       ENOMEM 保存領域の割り当てに失敗した。

属性

       この節で使用されている用語の説明については、 attributes(7) を参照。

       ┌─────────────────┬───────────────┬─────────────┐
       │インターフェース属性          │
       ├─────────────────┼───────────────┼─────────────┤
       │tempnam()        │ Thread safety │ MT-Safe env │
       └─────────────────┴───────────────┴─────────────┘

準拠

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

注意

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

       SUSv2 では TMPDIR に付いて言及されていない。 glibc は、プログラムが set-user-ID  されていない場合に限って
       これを用いる。 SVr4 では d) で使用されるディレクトリを /tmp と定めている (glibc もこの通りである)。

       パス名を返すのに使用するメモリーを動的に確保するので、 tmpnam(3)  と違い、 tempnam() はリエントラントであ
       り、スレッドセーフである。

       tempnam()  関数は最大 TMP_MAX 回まで、呼び出される度に異なる文字列を作成する (TMP_MAX<stdio.h> で定義
       されている)。 もし TMP_MAX 回以上呼び出された場合、動作は実装依存である。

       tempnam()  は最大で pfx の先頭 5 バイトを使用する。

       他と重ならない名前が見つけられなかった場合、glibc の tempnam()  の実装はエラー EEXIST で失敗する。

バグ

       「適切」という言葉の正確な意味は定義されていない。 ディレクトリに対してどの程度のアクセス権限が必要なのか
       は指定されていない。

関連項目

       mkstemp(3), mktemp(3), tmpfile(3), tmpnam(3)

この文書について

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

                                                   2017-09-15                                         TEMPNAM(3)