Go to the previous, next section.
If you need to use a temporary file in your program, you can use the
tmpfile
function to open it. Or you can use the tmpnam
function make a name for a temporary file and then open it in the usual
way with fopen
.
The tempnam
function is like tmpnam
but lets you choose
what directory temporary files will go in, and something about what
their file names will look like.
These facilities are declared in the header file `stdio.h'.
Function: FILE * tmpfile (void)
This function creates a temporary binary file for update mode, as if by
calling fopen
with mode "wb+"
. The file is deleted
automatically when it is closed or when the program terminates. (On
some other ANSI C systems the file may fail to be deleted if the program
terminates abnormally).
Function: char * tmpnam (char *result)
This function constructs and returns a file name that is a valid file
name and that does not name any existing file. If the result
argument is a null pointer, the return value is a pointer to an internal
static string, which might be modified by subsequent calls. Otherwise,
the result argument should be a pointer to an array of at least
L_tmpnam
characters, and the result is written into that array.
It is possible for tmpnam
to fail if you call it too many times.
This is because the fixed length of a temporary file name gives room for
only a finite number of different names. If tmpnam
fails, it
returns a null pointer.
The value of this macro is an integer constant expression that represents
the minimum allocation size of a string large enough to hold the
file name generated by the tmpnam
function.
The macro TMP_MAX
is a lower bound for how many temporary names
you can create with tmpnam
. You can rely on being able to call
tmpnam
at least this many times before it might fail saying you
have made too many temporary file names.
With the GNU library, you can create a very large number of temporary
file names--if you actually create the files, you will probably run out
of disk space before you run out of names. Some other systems have a
fixed, small limit on the number of temporary files. The limit is never
less than 25
.
Function: char * tempnam (const char *dir, const char *prefix)
This function generates a unique temporary filename. If prefix is not a null pointer, up to five characters of this string are used as a prefix for the file name.
The directory prefix for the temporary file name is determined by testing each of the following, in sequence. The directory must exist and be writable.
TMPDIR
, if it is defined.
P_tmpdir
macro.
This function is defined for SVID compatibility.
This macro is the name of the default directory for temporary files.
Older Unix systems did not have the functions just described. Instead
they used mktemp
and mkstemp
. Both of these functions
work by modifying a file name template string you pass. The last six
characters of this string must be `XXXXXX'. These six `X's
are replaced with six characters which make the whole string a unique
file name. Usually the template string is something like
`/tmp/prefixXXXXXX', and each program uses a unique prefix.
Note: Because mktemp
and mkstemp
modify the
template string, you must not pass string constants to them.
String constants are normally in read-only storage, so your program
would crash when mktemp
or mkstemp
tried to modify the
string.
Function: char * mktemp (char *template)
The mktemp
function generates a unique file name by modifying
template as described above. If successful, it returns
template as modified. If mktemp
cannot find a unique file
name, it makes template an empty string and returns that. If
template does not end with `XXXXXX', mktemp
returns a
null pointer.
Function: int mkstemp (char *template)
The mkstemp
function generates a unique file name just as
mktemp
does, but it also opens the file for you with open
(see section Opening and Closing Files). If successful, it modifies
template in place and returns a file descriptor open on that file
for reading and writing. If mkstemp
cannot create a
uniquely-named file, it makes template an empty string and returns
-1
. If template does not end with `XXXXXX',
mkstemp
returns -1
and does not modify template.
Unlike mktemp
, mkstemp
is actually guaranteed to create a
unique file that cannot possibly clash with any other program trying to
create a temporary file. This is because it works by calling
open
with the O_EXCL
flag bit, which says you want to
always create a new file, and get an error if the file already exists.
Go to the previous, next section.