tmpnam, tmpnam_r — create a name for a temporary file
#include <stdio.h>
char
*tmpnam( |
char * | s) ; |
The tmpnam
() function
returns a pointer to a string that is a valid filename, and
such that a file with this name did not exist at some point
in time, so that naive programmers may think it a suitable
name for a temporary file. If the argument s
is NULL this name is
generated in an internal static buffer and may be overwritten
by the next call to tmpnam
().
If s
is not NULL, the
name is copied to the character array (of length at least
L_tmpnam
) pointed
to by s
and the value
s
is returned in case
of success.
The pathname that is created, has a directory prefix
P_tmpdir
. (Both
L_tmpnam
and
P_tmpdir
are
defined in <stdio.h>
, just like
the TMP_MAX
mentioned
below.)
The tmpnam
() function
returns a pointer to a unique temporary filename, or NULL if
a unique name cannot be generated.
The tmpnam
() function
generates a different string each time it is called, up to
TMP_MAX
times. If it is called
more than TMP_MAX
times, the
behavior is implementation defined.
Although tmpnam(3) generates names
that are difficult to guess, it is nevertheless possible that
between the time that tmpnam(3) 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).
Portable applications that use threads cannot call
tmpnam
() with NULL parameter if
either _POSIX_THREADS or _POSIX_THREAD_SAFE_FUNCTIONS is
defined.
A POSIX draft proposed to use a function tmpnam_r
() defined by
char * tmpnam_r(char *s) { return s ? tmpnam(s) : NULL; }
apparently as a warning not to use NULL. A few systems
implement it. To get a glibc prototype for this function,
define _SVID_SOURCE
or
_BSD_SOURCE
before including
<stdio.h>
.
mkstemp(3), mktemp(3), tempnam(3), tmpfile(3)
|