TMPNAM(3) - man page online | library functions

Create a name for a temporary file.

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


Note: Avoid use of tmpnam(); use mkstemp(3) or tmpfile(3) instead. 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 tmp‐ nam(). 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.


For an explanation of the terms used in this section, see attributes(7). ┌───────────┬───────────────┬──────────────────────────┐ │Interface │ Attribute │ Value │ ├───────────┼───────────────┼──────────────────────────┤ │tmpnam() │ Thread safety │ MT-Unsafe race:tmpnam/!s │ ├───────────┼───────────────┼──────────────────────────┤ │tmpnam_r() │ Thread safety │ MT-Safe │ └───────────┴───────────────┴──────────────────────────┘


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 sym‐ bolic 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 pro‐ totype 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 4.04 of the Linux man-pages project. A description of the project, information about reporting bugs, and the latest version of this page, can be found at
2015-03-02 TMPNAM(3)
This manual Reference Other manuals
tmpnam(3) referred by environ(7) | explain(1) | explain(3) | explain_tmpnam(3) | explain_tmpnam_or_die(3) | getpid(2) | mkdtemp(3) | mkstemp(3) | mktemp(3) | ns_mktemp(3aolserver) | tempnam(3) | tmpfile(3)
refer to attributes(7) | mkstemp(3) | mktemp(3) | open(2) | tempnam(3) | tmpfile(3)