Manual Section... (3) - page: tmpnam_r

NAME

SYNOPSIS

DESCRIPTION

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.)

RETURN VALUE

The
tmpnam()
function returns a pointer to a unique temporary
filename, or NULL if a unique name cannot be generated.

ERRORS

CONFORMING TO

NOTES

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()
generates names that are difficult to guess,
it is nevertheless possible that between the time that
tmpnam()
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 a NULL argument 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>.