TMPNAM
Section: Linux Programmer's Manual (3)
Updated: 2008-08-06
Index
Return to Main Contents
NAME
tmpnam, tmpnam_r - create a name for a temporary file
SYNOPSIS
#include <stdio.h>
char *tmpnam(char *s);
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
No errors are defined.
CONFORMING TO
SVr4, 4.3BSD, C89, C99, POSIX.1-2001.
POSIX.1-2008 marks
tmpnam()
as obsolete.
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>.
BUGS
Never use this function.
Use
mkstemp(3)
or
tmpfile(3)
instead.
SEE ALSO
mkstemp(3),
mktemp(3),
tempnam(3),
tmpfile(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/.