# std::tmpnam

From cppreference.com
< cpp‎ | io‎ | c

Defined in header `<cstdio>` |  |
char* tmpnam( char* filename ); |  |

Creates a unique filename that does not name a currently existing file, and stores it in the character string pointed to by `filename`. The function is capable of generating up to TMP_MAX of unique filenames, but some or all of them may already be in use, and thus not suitable return values.

`std::tmpnam` modifies static state and is not required to be thread-safe.

### Parameters

filename | - | pointer to the character array capable of holding at least L_tmpnam bytes, to be used as a result buffer. If a null pointer is passed, a pointer to an internal static buffer is returned.

### Return value

`filename` if `filename` was not NULL. Otherwise a pointer to an internal static buffer is returned. If no suitable filename can be generated, NULL is returned.

### Notes

Although the names generated by `std::tmpnam` are difficult to guess, it is possible that a file with that name is created by another process between the moment `std::tmpnam` returns and the moment this program attempts to use the returned name to create a file. The standard function std::tmpfile and the POSIX function mkstemp do not have this problem (creating a unique directory using only the standard C library still requires the use of `tmpnam`)

POSIX systems additionally define the similarly named function `tempnam()`, which offers the choice of a directory (which defaults to the optionally defined macro `P_tmpdir)`

### Example

Run this code

    #include <iostream>
    #include <cstdio>
    #include <string>

    int main()
    {
        std::string name1 = std::tmpnam(nullptr);
        std::cout << "temporary file name: " << name1 << '\n';

        char name2[L_tmpnam];
        if (std::tmpnam(name2)) {
            std::cout << "temporary file name: " << name2 << '\n';
        }
    }

Possible output:

    temporary file name: /tmp/fileDjwifs
    temporary file name: /tmp/fileEv2bfW

### See also

tmpfile | creates and opens a temporary, auto-removing file (function)
temp_directory_path (C++17) | returns a directory suitable for temporary files (function)

Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/io/c/tmpnam&oldid=85923"