tmpnam_s, _wtmpnam_s

一時ファイルの作成に使用できる名前を生成します。 これらの関数は、CRTtmpnam_wtmpnamセキュリティ機能に関する説明に従って、セキュリティの強化されたバージョンです。

構文

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

パラメーター

str
[out]生成された名前を保持するポインター。

sizeInChars
[in]バッファーのサイズ (文字数)。

戻り値

これらの関数はどちらも、正常終了の場合は 0、エラーの場合はエラー番号を返します。

エラー条件

str sizeInChars 戻り値 str の内容
NULL any EINVAL 変更されない
NULL ではない (有効なメモリを指す) 短すぎる ERANGE 変更されない

有効な場合strNULL、「パラメーターの検証」の説明に従って、無効なパラメーター ハンドラーが呼び出されます。 実行の継続が許可された場合、これらの関数は errnoEINVAL に設定し、EINVAL を返します。

解説

これらの各関数は、現在存在しないファイルの名前を返します。 tmpnam_s は、指定された Windows 一時ディレクトリで一意の名前を GetTempPathW返します。 ファイル名の先頭に円記号が付いていて、パス情報がない場合は、 \fname21現在の作業ディレクトリに対して名前が有効であることを示します。

tmpnam_s については、この生成されたファイル名を str で格納することができます。 tmpnam_s によって返される文字列の最大長は、STDIO.H に定義されているとおり L_tmpnam_s です。 strNULL の場合、tmpnam_s は内部の静的バッファーに結果を残します。 したがって後続の呼び出しは、この値を破棄します。 生成 tmpnam_s される名前は、プログラムによって生成されるファイル名で構成され、最初の tmpnam_s呼び出しの後に、STDIO の場合 TMP_MAX_S は base 32 (.1-.1vvvvvu) の順次番号のファイル拡張子になります。H は INT_MAX).

tmpnam_s は、オペレーティング システムから取得した OEM コード ページに従ってマルチバイト文字シーケンスを認識し、マルチバイト文字列の引数を適切な方法で自動的に処理します。 ワイド文字を扱う場合は、_wtmpnam_s ではなく tmpnam_s を使用します。_wtmpnam_s の場合、引数にはワイド文字列を指定します。また戻り値もワイド文字列です。 _wtmpnam_s がマルチバイト文字列を処理しない点を除き、_wtmpnam_stmpnam_s の動作は同じです。

C++ では、テンプレートのオーバーロードによってこれらの関数を簡単に使用できます。オーバーロードでは、バッファー長を自動的に推論できるため、サイズ引数を指定する必要がなくなります。 詳細については、「セキュリティで保護されたテンプレート オーバーロード」を参照してください

既定では、この関数のグローバル状態の適用対象は、アプリケーションになります。 この動作を変更するには、「CRT のグローバル状態」を参照してください

汎用テキスト ルーチンのマップ

TCHAR.H のルーチン _UNICODE_MBCS が定義されていない _MBCS が定義されている _UNICODE が定義されている
_ttmpnam_s tmpnam_s tmpnam_s _wtmpnam_s

必要条件

ルーチンによって返される値 必須ヘッダー
tmpnam_s <stdio.h>
_wtmpnam_s <stdio.h> または <wchar.h>

互換性の詳細については、「 Compatibility」を参照してください。

// 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.

関連項目

ストリーム入出力
_getmbcp
malloc
_setmbcp
tmpfile_s