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) 1)Creates a unique valid file name (no longer than
L_tmpnamin length) and stores it in character string pointed to by
filename. The function is capable of generating up to
TMP_MAXof unique filenames, but some or all of them may be in use in the filesystem and thus not suitable return values.
2)Same as
(1), except that up to
TMP_MAX_Snames may be generated, no longer than
L_tmpnam_sin length, and the following errors are detected at runtime and call the currently installed
constraint handlerfunction:
tmpnam_s
is 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.
[edit] Parameters 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 thefilename_s
array). [edit] Return value
1) 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.
2) Returns zero and writes the file name to 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).
[edit] NotesAlthough 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[edit] References
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4