tempnam

NAME

tempnam - create a name for a temporary file

SYNOPSIS

#include <stdio.h>
 I char *tempnam(const char * dir , const char * pfx );

DESCRIPTION

The R tempnam () function returns a pointer to a string that is a valid filename, and such that a file with this name did not exist when R tempnam () checked. The filename suffix of the pathname generated will start with pfx in case pfx is a non-NULL string of at most five bytes. The directory prefix part of the pathname generated is required to be `appropriate' (often that at least implies writable). Attempts to find an appropriate directory go through the following steps:
a)
In case the environment variable TMPDIR exists and contains the name of an appropriate directory, that is used.
b)
Otherwise, if the dir argument is non-NULL and appropriate, it is used.
c)
Otherwise, P_tmpdir (as defined in R <stdio.h> ) is used when appropriate.
d)
Finally an implementation-defined directory may be used.
The string returned by R tempnam () is allocated using malloc(3) and hence should be freed by free(3).

RETURN VALUE

The R tempnam () function returns a pointer to a unique temporary filename, or NULL if a unique name cannot be generated.

ERRORS

ENOMEM
Allocation of storage failed.

CONFORMING TO

SVr4, 4.3BSD, POSIX.1-2001

NOTES

Although tempnam(3) generates names that are difficult to guess, it is nevertheless possible that between the time that tempnam(3) returns a pathname, and the time that the program opens it, another program might create that pathname using open(2), or create it as a symbolic link. This can lead to security holes. To avoid such possibilities, use the open(2) O_EXCL flag to open the pathname. Or better yet, use mkstemp(3) or tmpfile(3). SUSv2 does not mention the use of R TMPDIR ; glibc will use it only when the program is not set-user-ID. On SVr4, the directory used under d) is R /tmp (and this is what glibc does).
Because it dynamically allocates memory used to return the pathname, R tempnam () is reentrant, and thus thread safe, unlike tmpnam(3).
The R tempnam () function generates a different string each time it is called, up to TMP_MAX (defined in R <stdio.h> ) times. If it is called more than R TMP_MAX times, the behavior is implementation defined.
R tempnam () uses at most the first five bytes from R pfx . The glibc implementation of R tempnam () will fail with the error EEXIST upon failure to find a unique name.

BUGS

The precise meaning of `appropriate' is undefined; it is unspecified how accessibility of a directory is determined. Never use this function. Use mkstemp(3) or tmpfile(3) instead.

SEE ALSO

mkstemp(3), mktemp(3), tmpfile(3), tmpnam(3)