tmpnam
, tempnam
—name for a temporary fileSynopsis
#include <stdio.h> char *tmpnam(char *s); char *tempnam(char *dir, char *pfx); char *_tmpnam_r(struct _reent *reent, char *s); char *_tempnam_r(struct _reent *reent, char *dir, char *pfx);
Description
Use either of these functions to generate a name for a temporary file.
The generated name is guaranteed to avoid collision with other files
(for up to TMP_MAX
calls of either function).
tmpnam
generates file names with the value of P_tmpdir
(defined in ‘stdio.h
’) as the leading directory component of the path.
You can use the tmpnam
argument s to specify a suitable area
of memory for the generated filename; otherwise, you can call
tmpnam(NULL)
to use an internal static buffer.
tempnam
allows you more control over the generated filename: you
can use the argument dir to specify the path to a directory for
temporary files, and you can use the argument pfx to specify a
prefix for the base filename.
If dir is NULL
, tempnam
will attempt to use the value of
environment variable TMPDIR
instead; if there is no such value,
tempnam
uses the value of P_tmpdir
(defined in ‘stdio.h
’).
If you don’t need any particular prefix to the basename of temporary
files, you can pass NULL
as the pfx argument to tempnam
.
_tmpnam_r
and _tempnam_r
are reentrant versions of tmpnam
and tempnam
respectively. The extra argument reent is a
pointer to a reentrancy structure.
Warnings
The generated filenames are suitable for temporary files, but do not
in themselves make files temporary. Files with these names must still
be explicitly removed when you no longer want them.
If you supply your own data area s for tmpnam
, you must ensure
that it has room for at least L_tmpnam
elements of type char
.
Returns
Both tmpnam
and tempnam
return a pointer to the newly
generated filename.
Portability
ANSI C requires tmpnam
, but does not specify the use of
P_tmpdir
. The System V Interface Definition (Issue 2) requires
both tmpnam
and tempnam
.
Supporting OS subroutines required: close
, fstat
, getpid
,
isatty
, lseek
, open
, read
, sbrk
, write
.
The global pointer environ
is also required.