Make a unique temporary filename


#include <stdlib.h>

char* mktemp( char* template );


A template for the filename that you want to use. This template can be any file name with some number of Xs appended to it, for example /tmp/temp.XXXX.



Use the -l c option to qcc to link against this library. This library is usually included automatically.


The mktemp() function takes the given file name template and overwrites a portion of it to create a filename. This file name is unique and suitable for use by the application. The trailing Xs are replaced with the current process number and/or a unique letter combination. The number of unique file names mktemp() can return depends on the number of Xs provided; if you specify six Xs, mktemp() tests roughly 266 combinations.

The mkstemp() function (unlike this function) creates the template file, mode 0600 (i.e. read-write for the owner), returning a file descriptor opened for reading and writing. This avoids the race between testing for a file's existence and opening it for use.


A pointer to the template, or NULL on failure; errno is set.


The pathname portion of the template isn't an existing directory.

This function may also set errno to any value specified by stat() .


POSIX 1003.1 XSI

Cancellation point Yes
Interrupt handler No
Signal handler Yes
Thread Yes


In general, avoid using mktemp(), because a hostile process can exploit a race condition in the time between the generation of a temporary filename by mktemp() and the invoker's use of the temporary name. Use mkstemp() instead.

This function can create only 26 unique file names per thread for each unique template.