Museum

Home

Lab Overview

Retrotechnology Articles

⇒ Online Manual

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

creat(2)

unlink(2)

fopen(3S)

malloc(3C)

mktemp(3C)

tmpfile(3S)

TMPNAM(3S)                           SysV                           TMPNAM(3S)



NAME
     tmpnam, tempnam - create a name for a temporary file

SYNOPSIS
     #include <stdio.h>

     char *tmpnam(s)
     char *s;

     char *tempnam(dir, pfx)
     const char *dir, *pfx;

DESCRIPTION
     These functions generate file names that can safely be used for a
     temporary file.

     tmpnam always generates a filename using the path-prefix defined as
     P_tmpdir in the stdio.h header file.  If s is NULL, tmpnam leaves its
     result in an internal static area and returns a pointer to that area.
     The next call to tmpnam will destroy the contents of the area.  If s is
     not NULL, it is assumed to be the address of an array of char of length
     at least L_tmpnam, where L_tmpnam is a constant defined in stdio.h;
     tmpnam places its result in that array and returns s.

     tempnam allows the user to control the choice of a directory.  The
     argument dir points to the name of the directory in which the file is to
     be created.  If dir is NULL, or points to a string that is not a valid
     directory name, the path-prefix defined as P_tmpdir in the stdio.h header
     file is used.

     If that directory is not accessible and the call is not being made from
     an AES- or XPG3-compliant environment, /tmp is used as a last resort.
     This entire sequence can be up-staged by providing an environment
     variable TMPDIR in the user's environment, whose value is the name of the
     desired temporary-file directory.

     Many applications prefer their temporary files to have certain favorite
     initial letter sequences in their names.  Use the pfx argument for this.
     This argument may be NULL, or point to a string of up to five characters
     to be used as the first few characters of the temporary-file name.

     tempnam uses malloc(3C) to get space for the constructed filename, and
     returns a pointer to this area.  Thus, any pointer value returned from
     tempnam may serve as an argument to free (see malloc(3C)).  If tempnam
     cannot return the expected result for any reason; that is, malloc(3C)
     failed, or none of the above mentioned attempts to find an appropriate
     directory was successful, a NULL, pointer is returned.

DIAGNOSTICS
     If the s parameter is null, the tmpnam function places its result into an
     internal static area and returns a pointer to that area. Subsequent calls
     modify  the contents of the static object, as follows:

          Each call stores a new string value in the static object.  Each call
          generates a file name unique for that process.   For example, the
          first call to tmpnam(NULL) for process 2023 returns the string
          /usr/tmp/aaaa02023.  The second call to tmpnam(NULL) returns a
          pointer to the same area of storage, but the string stored there is
          now /usr/tmp/aaba02023.

     If the s parameter is not null, it is assumed to be the address of an
     array of at least the number of bytes specified by L_tmpnam. L_tmpnam is
     a constant defined in the stdio.h header file. The tmpnam function places
     its results into that array and returns the value of the s parameter.

     Upon successful completion, the tempnam function returns a pointer to the
     generated pathname, suitable for use in a subsequent call to the free
     function.  Otherwise, null is returned and errno is set to indicate the
     error.

NOTES
     These functions generate a different filename each time they are called.

     Files created using names generated by these functions are temporary only
     in the sense that they reside in a directory intended for temporary use,
     and that their names are unique.  It is the user's responsibility to
     remove the file when its use is ended.

SEE ALSO
     creat(2), unlink(2), fopen(3S), malloc(3C), mktemp(3C), tmpfile(3S).

CAVEATS
     If called more than TMP_MAX (17,576) times in a single process, these
     functions will start recycling previously used names.  If tempnam is
     called with dir equal to P_tmpdir and a null pfx argument, then the
     combined total of unique names generated by tempnam and tmpnam is
     TMP_MAX.  Also, if a filename generated by tmpnam or tempnam collides
     with an existing filename, that name is skipped and a different one
     returned, resulting in fewer than TMP_MAX unique names being available.

     tmpnam and tempnam check that the generated filename does not already
     exist.  However, between the time a filename is created and the file is
     opened, it is possible for some other process to create a file with the
     same name.  This can never happen if that other process is using these
     functions or mktemp, and the file names are chosen to render duplication
     by other means unlikely.

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026