other versions
other languages
TEMPNAM(3) | Linux Programmer's Manual | TEMPNAM(3) |
名前¶
tempnam - テンポラリファイルの名前を作成する書式¶
#include <stdio.h>char *tempnam(const char *dir, const char *pfx);
glibc 向けの機能検査マクロの要件 ( feature_test_macros(7) 参照):
説明¶
tempnam() 関数はファイル名として正しい文字列へのポインタを返す。 このファイル名を持つファイルは、 tempnam() がチェックした時点においては存在しない (しなかった)。 pfx が NULL でない 5 バイト以内の文字列であれば、 生成されるパス名のうちのファイル名の部分は pfx から始まるものになる。 生成されるディレクトリの部分は、「適切」でなければならない (大抵の場合、「適切」であるためにはまず少なくとも 書き込み可能でなければならない)。- a)
- 環境変数 TMPDIR が設定されていて、 その内容が適切なディレクトリの名前なら、それを用いる。
- b)
- それ以外の場合、 dir 引き数が NULL でない文字列でかつ適切なら、それを用いる。
- c)
- それ以外の場合、 ( <stdio.h> で定義されている) P_tmpdir が適切なら、それを用いる。
- d)
- 最後に実装で定義されたディレクトリが用いられることになる。
返り値¶
tempnam() 関数は他と重ならないテンポラリファイル名へのポインタを返す。 他と重ならない名前が生成できなければ NULL を返す。エラー¶
- ENOMEM
- 保存領域の割り当てに失敗した。
準拠¶
SVr4, 4.3BSD, POSIX.1-2001. POSIX.1-2008 は tempnam() を廃止予定としている。注意¶
tempnam() は推測が難しい名前を生成するが、それにもかかわらず、 tempnam() がパス名を返してから、プログラムがそのファイルをオープンする までの間に、別のプログラムが同じパス名で、ファイルを open(2) で作成したり、シンボリックリンクを作成したりする可能性がある。 これはセキュリティホールにつながる可能性がある。 そのような可能性を回避するためには、 open(2) の O_EXCL フラグを使ってパス名をオープンすればよい。 もっといいのは、 mkstemp(3) や tmpfile(3) を使うことである。バグ¶
「適切」という言葉の正確な意味は定義されていない。 ディレクトリに対してどの程度のアクセス権限が必要なのかは指定されていない。関連項目¶
mkstemp(3), mktemp(3), tmpfile(3), tmpnam(3)この文書について¶
この man ページは Linux man-pages プロジェクトのリリース 3.41 の一部 である。プロジェクトの説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。2008-08-06 |