Movatterモバイル変換


[0]ホーム

URL:


cppreference.com
Namespaces
Variants
    Actions

      tmpnam, tmpnam_s

      From cppreference.com
      <c‎ |io
       
       
      File input/output
      Types and objects
      Functions
      File access
      Unformatted input/output
      (C95)(C95)
      (C95)
      (C95)(C95)
      (C95)
      (C95)

      Formatted input
       
      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)
      1) Creates a unique valid file name (no longer thanL_tmpnam in length) and stores it in character string pointed to byfilename. The function is capable of generating up toTMP_MAX of 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 toTMP_MAX_S names may be generated, no longer thanL_tmpnam_s in length, and the following errors are detected at runtime and call the currently installedconstraint handler function:
      • filename_s is a null pointer
      • maxsize is greater thanRSIZE_MAX
      • maxsize is less than the generated file name string
      As with all bounds-checked functions,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 constant1 before including<stdio.h>.

      tmpnam andtmpnam_s modify static state (which may be shared between these functions) and are not required to be thread-safe.

      Contents

      [edit]Parameters

      filename - pointer to the character array capable of holding at leastL_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 leastL_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 iffilename 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 tofilename_s on success. On error, returns non-zero and writes the null character tofilename_s[0] (only iffilename_s is not null andmaxsize is not zero and is not greater thanRSIZE_MAX).

      [edit]Notes

      Although the names generated bytmpnam are difficult to guess, it is possible that a file with that name is created by another process between the momenttmpnam returns and the moment this program attempts to use the returned name to create a file. The standard functiontmpfile and the POSIX functionmkstemp do not have this problem (creating a unique directory using only the standard C library still requires the use oftmpnam).

      POSIX systems additionally define the similarly named functiontempnam, which offers the choice of a directory (which defaults to the optionally defined macroP_tmpdir).

      [edit]Example

      Run this code
      #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);elseperror("mkstemp");}

      Possible output:

      temporary file name: /tmp/file90dLlRtemporary file name: /tmp/fileY9LWAgtemporary file name: /tmp/filexgv8PF

      [edit]References

      • C23 standard (ISO/IEC 9899:2024):
      • 7.21.4.4 The tmpnam function (p: TBD)
      • K.3.5.1.2 The tmpnam_s function (p: TBD)
      • C17 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)
      • C11 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)
      • C99 standard (ISO/IEC 9899:1999):
      • 7.19.4.4 The tmpnam function (p: 269-270)
      • C89/C90 standard (ISO/IEC 9899:1990):
      • 4.9.4.4 The tmpnam function

      [edit]See also

      returns a pointer to a temporary file
      (function)[edit]
      Retrieved from "https://en.cppreference.com/mwiki/index.php?title=c/io/tmpnam&oldid=150073"

      [8]ページ先頭

      ©2009-2025 Movatter.jp