Mkstemp

In computing, codice_1 is a POSIX function for creating a temporary file (a computer file which usually ceases to exist when the program, which opened the file, closes it or terminates). It accepts an argument that determines the location of the temporary file, and the prefix of its generated filename. After codice_1 was added to the Single UNIX Specification, the function codice_3 was deprecated, because the latter carried the risk that a temporary file with the same name could be created by another thread or process within the time from when the caller obtains the temporary filename and attempts to create it. codice_1 does not suffer from this problem.
Usage.
Declaration.
codice_5
Example.
The following code is an example of the usage of codice_1; the local variable codice_13 is modified by codice_1 and will contain the path to the new file:
void example()
 char filename[] = "/tmp/prefXXXXXX";
 mkstemp(filename);
Error conditions.
It is unspecified if codice_1 sets errno, and what values of errno are set, in the event of failure.
Mechanism.
The codice_1 function generates a filename according to the supplied argument for the template, and attempts to create it. It repeats this process until a file has been successfully created. After this, it opens the file and returns the file descriptor to the caller, with the data buffer that was passed to the function with the template now containing the new filename. The file can be deleted immediately after the codice_1 call returns to prevent other processes from opening it, but the file can still be used because the calling process will still have a valid file descriptor. Older versions of codice_1 created the file with an umask of 0666, resulting in the temporary files being readable and writable to all users, and thus presenting a security vulnerability; this is mitigated by setting the umask manually before calling codice_1. Newer versions of the function create the file with the umask 600, so that only the owner of the file may read from and write to it.