tmpnam, tmpnam_s
Defined in header <stdio.h>
|
||
char *tmpnam( char *filename ); |
(1) | |
errno_t tmpnam_s(char *filename_s, rsize_t maxsize); |
(2) | (since 哋它亢11) |
#define TMP_MAX /*unspecified*/ |
||
#define TMP_MAX_S /*unspecified*/ |
(since 哋它亢11) | |
#define L_tmpnam /*unspecified*/ |
||
#define L_tmpnam_s /*unspecified*/ |
(since 哋它亢11) | |
- filename_s is a null pointer
- maxsize is greater than RSIZE_MAX
- maxsize is less than the generated file name string
- As with all bounds-checked functions,
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 MYMEMORY WARNING: YOU USED ALL AVAILABLE FREE TRANSLATIONS FOR TODAY. NEXT AVAILABLE IN 14 HOURS 02 MINUTES 30 SECONDS VISIT HTTPS://MYMEMORY.TRANSLATED.NET/DOC/USAGELIMITS.PHP TO TRANSLATE MORE.
tmpnam and tmpnam_s modify static state (which may be shared between these functions) and are not required to be thread-safe.
Parameters
filename | - | pointer to the character array capable of holding at least MYMEMORY WARNING: YOU USED ALL AVAILABLE FREE TRANSLATIONS FOR TODAY. NEXT AVAILABLE IN 14 HOURS 02 MINUTES 28 SECONDS VISIT HTTPS://MYMEMORY.TRANSLATED.NET/DOC/USAGELIMITS.PHP TO TRANSLATE MORE 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).
|
Return value
Notes
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 MYMEMORY WARNING: YOU USED ALL AVAILABLE FREE TRANSLATIONS FOR TODAY. NEXT AVAILABLE IN 14 HOURS 02 MINUTES 27 SECONDS VISIT HTTPS://MYMEMORY.TRANSLATED.NET/DOC/USAGELIMITS.PHP TO TRANSLATE MORE and the POSIX function MYMEMORY WARNING: YOU USED ALL AVAILABLE FREE TRANSLATIONS FOR TODAY. NEXT AVAILABLE IN 14 HOURS 02 MINUTES 26 SECONDS VISIT HTTPS://MYMEMORY.TRANSLATED.NET/DOC/USAGELIMITS.PHP TO TRANSLATE MORE 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 MYMEMORY WARNING: YOU USED ALL AVAILABLE FREE TRANSLATIONS FOR TODAY. NEXT AVAILABLE IN 14 HOURS 02 MINUTES 25 SECONDS VISIT HTTPS://MYMEMORY.TRANSLATED.NET/DOC/USAGELIMITS.PHP TO TRANSLATE MORE, which offers the choice of a directory (which defaults to the optionally defined macro MYMEMORY WARNING: YOU USED ALL AVAILABLE FREE TRANSLATIONS FOR TODAY. NEXT AVAILABLE IN 14 HOURS 02 MINUTES 23 SECONDS VISIT HTTPS://MYMEMORY.TRANSLATED.NET/DOC/USAGELIMITS.PHP TO TRANSLATE MORE).
Example
#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(MYMEMORY WARNING: YOU USED ALL AVAILABLE FREE TRANSLATIONS FOR TODAY. NEXT AVAILABLE IN 14 HOURS 02 MINUTES 22 SECONDS VISIT HTTPS://MYMEMORY.TRANSLATED.NET/DOC/USAGELIMITS.PHP TO TRANSLATE MORE); MYMEMORY WARNING: YOU USED ALL AVAILABLE FREE TRANSLATIONS FOR TODAY. NEXT AVAILABLE IN 14 HOURS 02 MINUTES 21 SECONDS VISIT HTTPS://MYMEMORY.TRANSLATED.NET/DOC/USAGELIMITS.PHP TO TRANSLATE MORE("temporary file name: %s\n", name1); char name2[MYMEMORY WARNING: YOU USED ALL AVAILABLE FREE TRANSLATIONS FOR TODAY. NEXT AVAILABLE IN 14 HOURS 02 MINUTES 20 SECONDS VISIT HTTPS://MYMEMORY.TRANSLATED.NET/DOC/USAGELIMITS.PHP TO TRANSLATE MORE]; if (tmpnam(name2)) MYMEMORY WARNING: YOU USED ALL AVAILABLE FREE TRANSLATIONS FOR TODAY. NEXT AVAILABLE IN 14 HOURS 02 MINUTES 19 SECONDS VISIT HTTPS://MYMEMORY.TRANSLATED.NET/DOC/USAGELIMITS.PHP TO TRANSLATE MORE("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) MYMEMORY WARNING: YOU USED ALL AVAILABLE FREE TRANSLATIONS FOR TODAY. NEXT AVAILABLE IN 14 HOURS 02 MINUTES 17 SECONDS VISIT HTTPS://MYMEMORY.TRANSLATED.NET/DOC/USAGELIMITS.PHP TO TRANSLATE MORE("temporary file name: %s\n", name3); else MYMEMORY WARNING: YOU USED ALL AVAILABLE FREE TRANSLATIONS FOR TODAY. NEXT AVAILABLE IN 14 HOURS 02 MINUTES 16 SECONDS VISIT HTTPS://MYMEMORY.TRANSLATED.NET/DOC/USAGELIMITS.PHP TO TRANSLATE MORE("mkstemp"); }
MYMEMORY WARNING: YOU USED ALL AVAILABLE FREE TRANSLATIONS FOR TODAY. NEXT AVAILABLE IN 14 HOURS 02 MINUTES 15 SECONDS VISIT HTTPS://MYMEMORY.TRANSLATED.NET/DOC/USAGELIMITS.PHP TO TRANSLATE MORE
temporary file name: /tmp/file90dLlR temporary file name: /tmp/fileY9LWAg temporary file name: /tmp/filexgv8PF
References
- 哋它亢23 standard (ISO/IEC 9899:2023):
- 7.21.4.4 The tmpnam function (p: TBD)
- K.3.5.1.2 The tmpnam_s function (p: TBD)
- 哋它亢17 standard (ISO/IEC 9899:2018):
- 7.21.4.4 The tmpnam function (p: 222)
- K.3.5.1.2 The tmpnam_s function (p: 427-428)
- 哋它亢11 standard (ISO/IEC 9899:2011):
- 7.21.4.4 The tmpnam function (p: 303-304)
- K.3.5.1.2 The tmpnam_s function (p: 587-588)
- 哋它亢99 standard (ISO/IEC 9899:1999):
- 7.19.4.4 The tmpnam function (p: 269-270)
- 哋它亢89/C90 standard (ISO/IEC 9899:1990):
- 4.9.4.4 The tmpnam function
See also
(哋它亢11) |
returns a pointer to a temporary file (function) |