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.