Man Linux: Main Page and Category List

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

                                  2008-08-06                         TMPNAM(3)