TMPNAM
NAME
tmpnam, tmpnam_r - create a name for a temporary file
SYNOPSIS
#include <stdio.h>
I char *tmpnam(char * s );
DESCRIPTION
The
R 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
R tmpnam ().
If
s
is not NULL, the name is copied to the character array (of length
at least
R 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
R P_tmpdir .
(Both
L_tmpnam
and
P_tmpdir
are defined in
R <stdio.h> ,
just like the
TMP_MAX
mentioned below.)
RETURN VALUE
The
R tmpnam ()
function returns a pointer to a unique temporary
filename, or NULL if a unique name cannot be generated.
ERRORS
No errors are defined.
CONFORMING TO
SVr4, 4.3BSD, C89, C99, POSIX.1-2001.
NOTES
The
R 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
R tmpnam ()
with NULL parameter if either _POSIX_THREADS or
_POSIX_THREAD_SAFE_FUNCTIONS is defined.
A POSIX draft proposed to use a function
R 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
R <stdio.h> .
BUGS
SEE ALSO