| NAME | SYNOPSIS | DESCRIPTION | RETURN VALUE | ERRORS | CONFORMING TO | NOTES | BUGS | SEE ALSO | COLOPHON | The Linux Programming Interface |
TMPNAM(3) Linux Programmer's Manual TMPNAM(3)
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.
No errors are defined.
SVr4, 4.3BSD, C89, C99, POSIX.1-2001. POSIX.1-2008 marks tmpnam() as
obsolete.
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 from <stdio.h>, define _SVID_SOURCE or
_BSD_SOURCE (before including any header file).
Never use this function. Use mkstemp(3) or tmpfile(3) instead.
mkstemp(3), mktemp(3), tempnam(3), tmpfile(3)
This page is part of release 3.32 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/.
2010-09-10 TMPNAM(3)
HTML rendering created 2010-12-03 by Michael Kerrisk, author of The Linux Programming Interface