NAME
tmpnam(), tempnam() — create a name for a temporary file
SYNOPSIS
#include <stdio.h>
char *tmpnam(char *s);
char *tempnam(const char *dir, const char *pfx);
DESCRIPTION
tmpnam()
and
tempnam()
generate file names that can safely be used for a temporary file.
- tmpnam()
Always generates a file name 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()
destroys the contents of the area.
If
s
is not
NULL,
it is assumed to be the address of an array of at least
L_tmpnam
bytes, where
L_tmpnam
is a constant defined in
<stdio.h>;
tmpnam()
places its result in that array and returns
s.
For multi-thread applications, if
s
is a
NULL
pointer, the operation is not performed and a
NULL
pointer is returned.
- 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 an appropriate directory name,
the path-prefix defined as
P_tmpdir
in the
<stdio.h>
header file is used.
If that directory is not accessible,
/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.
In order to request the default behavior for either
tempnam()
or
tmpnam(),
a NULL value must
be passed in
dir
and
pfx
for
tempnam(),
or in
s
for
tmpnam().
If valid parameters are not
passed in, behavior is undefined.
Many applications are written such that temporary files
have certain initial character sequences in their names.
Use the
pfx
argument to define a given prefix.
The argument can be
NULL
or point to a string of up to five characters
to be used as the first characters in the temporary-file name.
tempnam()
uses
malloc()
(see
malloc(3C))
to get space for the constructed file name,
and returns a pointer to this area.
Thus, any pointer value returned from
tempnam()
can serve as an argument to
free()
(see
malloc(3C)).
If
tempnam()
cannot return the expected result for any reason; i.e.,
malloc()
failed, or none of the above mentioned attempts
to find an appropriate directory was successful, a
NULL
pointer is returned.
Notes
tmpnam()
and
tempnam()
generate a different file name each time they are called,
but start recycling previously used names if called more than
TMP_MAX
times in a single process.
Files created using these functions and either
fopen()
or
creat()
(see
fopen(3S)
and
creat(2))
are temporary
only in the sense that they reside in a directory
intended for temporary use,
and their names are unique.
It is the user's responsibility to use
unlink(2)
to remove the file when it is no longer needed.
WARNINGS
Between the time a file name 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 such
that duplication by other means is unlikely.
STANDARDS CONFORMANCE
tmpnam(): AES, SVID2, SVID3, XPG2, XPG3, XPG4, FIPS 151-2, POSIX.1, ANSI C
tempnam(): AES, SVID2, SVID3, XPG2, XPG3, XPG4