*nix Documentation Project
·  Home
 +   man pages
·  Linux HOWTOs
·  FreeBSD Tips
·  *niX Forums

  man pages->OpenBSD man pages -> tempnam (3)              
Title
Content
Arch
Section
 

TMPFILE(3)

Contents


NAME    [Toc]    [Back]

     tempnam, tmpfile, tmpnam - temporary file routines

SYNOPSIS    [Toc]    [Back]

     #include <stdio.h>

     FILE *
     tmpfile(void);

     char *
     tmpnam(char *str);

     char *
     tempnam(const char *tmpdir, const char *prefix);

DESCRIPTION    [Toc]    [Back]

     The tmpfile() function returns a pointer to a stream associated with a
     file  descriptor  returned  by  the routine mkstemp(3).  The
created file is
     unlinked before tmpfile() returns, causing the  file  to  be
automatically
     deleted  when the last reference to it is closed.  Since mkstemp(3) creates
 the file with mode S_IRUSR  S_IWUSR, after  the  unlink
fchown(2) and
     umask(2)  are used to set the file mode to the expected value.  The file
     is opened with the access value `w+'.

     The tmpnam() function returns a pointer to a file  name,  in
the P_tmpdir
     directory,  which did not reference an existing file at some
indeterminate
     point in the past.  P_tmpdir is defined in the include  file
<stdio.h>.
     If  the argument str is non-null, the file name is copied to
the buffer it
     references.  Otherwise, the file name is copied to a  static
buffer.  In
     either case, tmpnam() returns a pointer to the file name.

     The  buffer  referenced  by  str  is expected to be at least
L_tmpnam bytes in
     length.  L_tmpnam is defined in the include file  <stdio.h>.

     The  tempnam() function is similar to tmpnam(), but provides
the ability
     to specify the directory which will  contain  the  temporary
file and the
     file name prefix.

     The  environment  variable  TMPDIR  (if  set),  the argument
tmpdir (if nonnull),
 the directory P_tmpdir, and the  directory  /tmp  are
tried, in the
     listed order, as directories in which to store the temporary
file.

     The argument prefix, if non-null, is used to specify a  file
name prefix,
     which  will  be  the  first  part  of the created file name.
tempnam() allocates
 memory in which to store the file name;  the  returned
pointer may be
     used as a subsequent argument to free(3).

RETURN VALUES    [Toc]    [Back]

     The  tmpfile()  function  returns  a pointer to an open file
stream on success,
 and a null pointer on error.

     The tmpnam() and tempnam() functions return a pointer  to  a
file name on
     success, and a null pointer on error.

ERRORS    [Toc]    [Back]

     The  tmpfile() function may fail and set the global variable
errno for any
     of the errors specified for the library functions  fdopen(3)
or
     mkstemp(3).

     The  tmpnam() function may fail and set errno for any of the
errors specified
 for the library function mktemp(3).

     The tempnam() function may fail and set errno for any of the
errors specified
 for the library functions malloc(3) or mktemp(3).

SEE ALSO    [Toc]    [Back]

      
      
     mkstemp(3), mktemp(3)

STANDARDS    [Toc]    [Back]

     The   tmpfile()  and  tmpnam()  functions  conform  to  ANSI
X3.159-1989 (``ANSI
     C'').

BUGS    [Toc]    [Back]

     tmpnam() and tempnam() are provided for System  V  and  ANSI
compatibility
     only.  These interfaces are typically not used in safe ways.
The
     mkstemp(3) interface is strongly preferred.

     There are four important problems with these interfaces  (as
well as with
     the historic mktemp(3) interface).  First, there is an obvious race between
 file name selection and file  creation  and  deletion:
the program is
     typically written to call tmpnam(), tmpname(), or mktemp(3).
Subsequently,
 the program calls open(2) or  fopen(3)  and  erroneously
opens a file
     (or symbolic link, or FIFO or other device) that the attacker has placed
     in the expected file location.  Hence mkstemp(3)  is  recommended, since it
     atomically creates the file.

     Second, most historic implementations provide only a limited
number of
     possible temporary file names (usually 26) before file names
will start
     being  recycled.   Third,  the  System  V implementations of
these functions
     (and of mktemp(3)) use the access(2) function  to  determine
whether or not
     the temporary file may be created.  This has obvious ramifications for
     daemons or setuid/setgid programs, complicating the portable
use of these
     interfaces  in such programs.  Finally, there is no specification of the
     permissions with which the temporary files are created.

     This implementation does not have these flaws, but  portable
software cannot
 depend on that.

     For these reasons, ld(1) will output a warning message whenever it links
     code that uses the functions tmpnam() or tempnam().

OpenBSD     3.6                        November     17,      1993
[ Back ]
 Similar pages
Name OS Title
tmpfile Tru64 Create a temporary file
mktemp HP-UX make a name for a temporary file
tmpnam IRIX create a name for a temporary file
tempnam Tru64 Construct the name for a temporary file
tmpnam Tru64 Construct the name for a temporary file
tmpfile IRIX create a temporary file
tempnam Linux create a name for a temporary file
tmpfile Linux create a temporary file
tmpnam Linux create a name for a temporary file
mktemp Linux make a unique temporary file name
Copyright © 2004-2005 DeniX Solutions SRL
newsletter delivery service