Defined in header <stdio.h> | ||
|---|---|---|
char *tmpnam( char *filename ); | (1) | |
errno_t tmpnam_s(char *filename_s, rsize_t maxsize); | (2) | (since C11) |
#define TMP_MAX /*unspecified*/ | ||
#define TMP_MAX_S /*unspecified*/ | (since C11) | |
#define L_tmpnam /*unspecified*/ | ||
#define L_tmpnam_s /*unspecified*/ | (since C11) |
L_tmpnam in length) and stores it in 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 be in use in the filesystem and thus not suitable return values.TMP_MAX_S names may be generated, no longer than L_tmpnam_s in length, and the following errors are detected at runtime and call the currently installed constraint handler function: filename_s is a null pointer maxsize is greater than RSIZE_MAX maxsize is less than the generated file name string tmpnam_s only guaranteed to be available if __STDC_LIB_EXT1__ is defined by the implementation and if the user defines __STDC_WANT_LIB_EXT1__ to the integer constant 1 before including <stdio.h>.tmpnam and tmpnam_s modify static state (which may be shared between these functions) and are not required to be thread-safe.
| filename | - | pointer to the character array capable of holding at least L_tmpnam bytes, to be used as a result buffer. If null pointer is passed, a pointer to an internal static buffer is returned. |
| filename_s | - | pointer to the character array capable of holding at least L_tmpnam_s bytes, to be used as a result buffer. |
| maxsize | - | maximum number of characters the function is allowed to write (typically the size of the filename_s array). |
filename if filename was not a null pointer. Otherwise a pointer to an internal static buffer is returned. If no suitable filename can be generated, null pointer is returned.filename_s on success. On error, returns non-zero and writes the null character to filename_s[0] (only if filename_s is not null and maxsize is not zero and is not greater than RSIZE_MAX).Although the names generated by tmpnam are difficult to guess, it is possible that a file with that name is created by another process between the moment tmpnam returns and the moment this program attempts to use the returned name to create a file. The standard function 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).
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void)
{
// Note, the compiler/linker may issue a security warning, e.g. GCC:
// "warning: the use of `tmpnam' is dangerous, better use `mkstemp'"
char* name1 = tmpnam(NULL);
printf("temporary file name: %s\n", name1);
char name2[L_tmpnam];
if (tmpnam(name2))
printf("temporary file name: %s\n", name2);
// POSIX offers mkstemp. The following declaration might be
// necessary as mkstemp is absent in the standard C <stdlib.h>.
int mkstemp(char*);
char name3[] = "/tmp/fileXXXXXX"; // at least six 'X' required ^_^
int file_descriptor = mkstemp(name3);
if (file_descriptor != -1)
printf("temporary file name: %s\n", name3);
else
perror("mkstemp");
}Possible output:
temporary file name: /tmp/file90dLlR temporary file name: /tmp/fileY9LWAg temporary file name: /tmp/filexgv8PF
|
(C11) | returns a pointer to a temporary file (function) |
C++ documentation for tmpnam |
|
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/c/io/tmpnam