Provided by: manpages-dev_4.04-2_all bug


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


       For an explanation of the terms used in this section, see attributes(7).

       │InterfaceAttributeValue                    │
       │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
       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

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