tmpnam_s、_wtmpnam_stmpnam_s, _wtmpnam_s

一時ファイルの作成に使用できる名前を生成します。Generate names you can use to create temporary files. これらは、「Security Features in the CRT」 (CRT のセキュリティ機能) の説明にあるとおり、セキュリティが強化されたバージョンの tmpnam および _wtmpnam です。These are versions of tmpnam and _wtmpnam with security enhancements as described in Security Features in the CRT.

構文Syntax

errno_t tmpnam_s(
   char * str,
   size_t sizeInChars
);
errno_t _wtmpnam_s(
   wchar_t *str,
   size_t sizeInChars
);
template <size_t size>
errno_t tmpnam_s(
   char (&str)[size]
); // C++ only
template <size_t size>
errno_t _wtmpnam_s(
   wchar_t (&str)[size]
); // C++ only

パラメーターParameters

strstr
生成された名前を保持するポインター。Pointer that will hold the generated name.

sizeInCharssizeInChars
バッファーのサイズ (文字単位)。The size of the buffer in characters.

戻り値Return Value

これらの関数はどちらも、正常終了の場合は 0、エラーの場合はエラー番号を返します。Both of these functions return 0 if successful or an error number on failure.

エラー条件Error Conditions

strstr sizeInCharssizeInChars 戻り値Return Value 内容 strContents of str
NULLNULL 任意any EINVALEINVAL 変更されないnot modified
not NULL (有効なメモリを指す)not NULL (points to valid memory) 短すぎるtoo short ERANGEERANGE 変更されないnot modified

StrNULLの場合は、「パラメーターの検証」で説明されているように、無効なパラメーターハンドラーが呼び出されます。If str is NULL, the invalid parameter handler is invoked, as described in Parameter Validation. 実行の継続が許可された場合、これらの関数はerrnoeinvalに設定し、 einvalを返します。If execution is allowed to continue, these functions set errno to EINVAL and return EINVAL.

RemarksRemarks

これらの各関数は、現在存在しないファイルの名前を返します。Each of these functions returns the name of a file that does not currently exist. tmpnam_sは、 GetTempPathWによって返される指定された Windows 一時ディレクトリ内で一意の名前を返します。tmpnam_s returns a name unique in the designated Windows temporary directory returned by GetTempPathW. ファイル名の前に円記号が付いていてパス情報がない場合 (\fname21 など)、その名前は現在の作業ディレクトリに対して有効なので注意してください。Note than when a file name is pre-pended with a backslash and no path information, such as \fname21, this indicates that the name is valid for the current working directory.

Tmpnam_sでは、この生成されたファイル名をstrに格納できます。For tmpnam_s, you can store this generated file name in str. Tmpnam_sによって返される文字列の最大長はL_TMPNAM_Sで、STDIO で定義されています。始め.The maximum length of a string returned by tmpnam_s is L_tmpnam_s, defined in STDIO.H. StrNULLの場合、 tmpnam_sは、結果を内部の静的バッファーに残します。If str is NULL, then tmpnam_s leaves the result in an internal static buffer. したがって後続の呼び出しは、この値を破棄します。Thus any subsequent calls destroy this value. Tmpnam_sによって生成される名前は、プログラムによって生成されるファイル名で構成され、 tmpnam_sの最初の呼び出しの後に、ベース 32 (. 1- 1vvvvvu) の連続する番号のファイル拡張子 (STDIO の場合) で構成されます。H はINT_MAX)。The name generated by tmpnam_s consists of a program-generated file name and, after the first call to tmpnam_s, a file extension of sequential numbers in base 32 (.1-.1vvvvvu, when TMP_MAX_S in STDIO.H is INT_MAX).

tmpnam_sは、オペレーティングシステムから取得した OEM コードページに従ってマルチバイト文字シーケンスを認識し、マルチバイト文字列の引数を適切な方法で自動的に処理します。tmpnam_s automatically handles multibyte-character string arguments as appropriate, recognizing multibyte-character sequences according to the OEM code page obtained from the operating system. _wtmpnam_sは、 tmpnam_sのワイド文字バージョンです。 _wtmpnam_sの引数と戻り値はワイド文字列です。_wtmpnam_s is a wide-character version of tmpnam_s; the argument and return value of _wtmpnam_s are wide-character strings. _wtmpnam_stmpnam_sは、 _wtmpnam_sがマルチバイト文字列を処理しない点を除いて、同じように動作します。_wtmpnam_s and tmpnam_s behave identically except that _wtmpnam_s does not handle multibyte-character strings.

C++ では、テンプレートのオーバーロードによってこれらの関数を簡単に使用できます。オーバーロードでは、バッファー長を自動的に推論できるため、サイズ引数を指定する必要がなくなります。In C++, using these functions is simplified by template overloads; the overloads can infer buffer length automatically, eliminating the need to specify a size argument. 詳細については、「 Secure Template Overloads」を参照してください。For more information, see Secure Template Overloads.

汎用テキスト ルーチンのマップGeneric-Text Routine Mappings

TCHAR.H のルーチンTCHAR.H routine _UNICODE および _MBCS が未定義の場合_UNICODE & _MBCS not defined _MBCS が定義されている場合_MBCS defined _UNICODE が定義されている場合_UNICODE defined
_ttmpnam_s_ttmpnam_s tmpnam_stmpnam_s tmpnam_stmpnam_s _wtmpnam_s_wtmpnam_s

必要条件Requirements

ルーチンによって返される値Routine 必須ヘッダーRequired header
tmpnam_stmpnam_s <stdio.h><stdio.h>
_wtmpnam_s_wtmpnam_s <stdio.h> または <wchar.h><stdio.h> or <wchar.h>

互換性の詳細については、「 互換性」を参照してください。For additional compatibility information, see Compatibility.

Example

// crt_tmpnam_s.c
// This program uses tmpnam_s to create a unique filename in the
// current working directory.
//

#include <stdio.h>
#include <stdlib.h>

int main( void )
{
   char name1[L_tmpnam_s];
   errno_t err;
   int i;

   for (i = 0; i < 15; i++)
   {
      err = tmpnam_s( name1, L_tmpnam_s );
      if (err)
      {
         printf("Error occurred creating unique filename.\n");
         exit(1);
      }
      else
      {
         printf( "%s is safe to use as a temporary file.\n", name1 );
      }
   }
}
C:\Users\LocalUser\AppData\Local\Temp\u19q8.0 is safe to use as a temporary file.
C:\Users\LocalUser\AppData\Local\Temp\u19q8.1 is safe to use as a temporary file.
C:\Users\LocalUser\AppData\Local\Temp\u19q8.2 is safe to use as a temporary file.
C:\Users\LocalUser\AppData\Local\Temp\u19q8.3 is safe to use as a temporary file.
C:\Users\LocalUser\AppData\Local\Temp\u19q8.4 is safe to use as a temporary file.
C:\Users\LocalUser\AppData\Local\Temp\u19q8.5 is safe to use as a temporary file.
C:\Users\LocalUser\AppData\Local\Temp\u19q8.6 is safe to use as a temporary file.
C:\Users\LocalUser\AppData\Local\Temp\u19q8.7 is safe to use as a temporary file.
C:\Users\LocalUser\AppData\Local\Temp\u19q8.8 is safe to use as a temporary file.
C:\Users\LocalUser\AppData\Local\Temp\u19q8.9 is safe to use as a temporary file.
C:\Users\LocalUser\AppData\Local\Temp\u19q8.a is safe to use as a temporary file.
C:\Users\LocalUser\AppData\Local\Temp\u19q8.b is safe to use as a temporary file.
C:\Users\LocalUser\AppData\Local\Temp\u19q8.c is safe to use as a temporary file.
C:\Users\LocalUser\AppData\Local\Temp\u19q8.d is safe to use as a temporary file.
C:\Users\LocalUser\AppData\Local\Temp\u19q8.e is safe to use as a temporary file.

関連項目See also

ストリーム入出力Stream I/O
_getmbcp_getmbcp
mallocmalloc
_setmbcp_setmbcp
tmpfile_stmpfile_s