tempnamのヘルプ・マニュアル
日本語 英語
tempnam --help
man tempnam
TEMPNAM(3) Linux Programmer’s Manual TEMPNAM(3)
名前
tempnam - テンポラリファイルの名前を作成する
書式
#include
char *tempnam(const char *dir, const char *pfx);
glibc 向けの機能検査マクロの要件 (feature_test_macros(7) 参照):
tempnam(): _BSD_SOURCE || _SVID_SOURCE
説明
tempnam() 関数はファイル名として正しい文字列へのポインターを返す。この
ファイル名を持つファイルは、 tempnam() がチェックした時点においては存在
しない (しなかった)。 pfx が NULL でない 5 バイト以内の文字列であれば、
生成されるパス名のうちのファイル名の部分は pfx から始まるものになる。生
成 されるディレクトリの部分は、「適切」でなければならない (大抵の場合、
「適切」であるためにはまず少なくとも書き込み可能でなければならない)。
適切なディレクトリの探索は、以下の手順にしたがって行われる。
a) 環境変数 TMPDIR が設定されていて、その内容が適切なディレクトリの名前
なら、それを用いる。
b) それ以外の場合、 dir 引き数が NULL でない文字列でかつ適切なら、それ
を用いる。
c) それ以外の場合、 ( で定義されている) P_tmpdir が適切なら 、
それを用いる。
d) 最後に実装で定義されたディレクトリが用いられることになる。
tempnam() が 返 す 文 字列は malloc(3) を使って確保される。そのため、
free(3) で解放すべきである。
返り値
tempnam() 関数は他と重ならないテンポラリファイル名へのポインタを返す 。
他と重ならない名前が生成できなければ NULL を返す。
エラー
ENOMEM 保存領域の割り当てに失敗した。
準拠
SVr4, 4.3BSD, POSIX.1-2001. POSIX.1-2008 は tempnam() を廃止予定として
いる。
注意
tempnam() は推測が難しい名前を生成するが、それにもかかわら ず 、 temp-
nam() がパス名を返してから、プログラムがそのファイルをオープンするまで
の間に、別のプログラムが同じパス名で、ファイルを 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 は で定義されている)。もし TMP_MAX 回以上呼び出
された場合、動作は実装依存である。
tempnam() は最大で pfx の先頭 5 バイトを使用する。
他と重ならない名前が見つけられなかった場合、glibc の tempnam() の実装は
エラー EEXIST で失敗する。
バグ
「適切」という言葉の正確な意味は定義されていない。ディレクトリに対し て
どの程度のアクセス権限が必要なのかは指定されていない。
決 してこの関数を使ってはならない。代わりに mkstemp(3) か tmpfile(3) を
使うこと。
関連項目
mkstemp(3), mktemp(3), tmpfile(3), tmpnam(3)
2008-08-06 TEMPNAM(3)
TEMPNAM(3) Linux Programmer’s Manual TEMPNAM(3)
NAME
tempnam - create a name for a temporary file
SYNOPSIS
#include
char *tempnam(const char *dir, const char *pfx);
Feature Test Macro Requirements for glibc (see feature_test_macros(7)):
tempnam(): _BSD_SOURCE || _SVID_SOURCE
DESCRIPTION
The tempnam() function returns a pointer to a string that is a valid
filename, and such that a file with this name did not exist when temp-
nam() checked. The filename suffix of the pathname generated will
start with pfx in case pfx is a non-NULL string of at most five bytes.
The directory prefix part of the pathname generated is required to be
"appropriate" (often that at least implies writable).
Attempts to find an appropriate directory go through the following
steps:
a) In case the environment variable TMPDIR exists and contains the name
of an appropriate directory, that is used.
b) Otherwise, if the dir argument is non-NULL and appropriate, it is
used.
c) Otherwise, P_tmpdir (as defined in ) is used when appropri-
ate.
d) Finally an implementation-defined directory may be used.
The string returned by tempnam() is allocated using malloc(3) and hence
should be freed by free(3).
RETURN VALUE
The tempnam() function returns a pointer to a unique temporary file-
name, or NULL if a unique name cannot be generated.
ERRORS
ENOMEM Allocation of storage failed.
CONFORMING TO
SVr4, 4.3BSD, POSIX.1-2001. POSIX.1-2008 marks tempnam() as obsolete.
NOTES
Although tempnam() generates names that are difficult to guess, it is
nevertheless possible that between the time that tempnam() returns a
pathname, and the time that the program opens it, another program might
create that pathname using open(2), or create it as a symbolic link.
This can lead to security holes. To avoid such possibilities, use the
open(2) O_EXCL flag to open the pathname. Or better yet, use
mkstemp(3) or tmpfile(3).
SUSv2 does not mention the use of TMPDIR; glibc will use it only when
the program is not set-user-ID. On SVr4, the directory used under d)
is /tmp (and this is what glibc does).
Because it dynamically allocates memory used to return the pathname,
tempnam() is reentrant, and thus thread safe, unlike tmpnam(3).
The tempnam() function generates a different string each time it is
called, up to TMP_MAX (defined in ) times. If it is called
more than TMP_MAX times, the behavior is implementation defined.
tempnam() uses at most the first five bytes from pfx.
The glibc implementation of tempnam() will fail with the error EEXIST
upon failure to find a unique name.
BUGS
The precise meaning of "appropriate" is undefined; it is unspecified
how accessibility of a directory is determined.
Never use this function. Use mkstemp(3) or tmpfile(3) instead.
SEE ALSO
mkstemp(3), mktemp(3), tmpfile(3), tmpnam(3)
COLOPHON
This page is part of release 3.22 of the Linux man-pages project. A
description of the project, and information about reporting bugs, can
be found at http://www.kernel.org/doc/man-pages/.
2008-08-06 TEMPNAM(3)