次の方法で共有


tmpnam_s, _wtmpnam_s

一時ファイルの作成に使用できる名前を生成します。 これらの関数は、「CRT のセキュリティ機能で説明されているように、セキュリティが強化されたtmpnam_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 任意 EINVAL 変更されない
NULL ではない (有効なメモリを指す) 短すぎる ERANGE 変更されない

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

解説

これらの各関数は、現在存在しないファイルの名前を返します。 tmpnam_s は、 GetTempPathWによって返される指定された Windows 一時ディレクトリ内で一意の名前を返します。 ファイル名の先頭に円記号が付いていて、パス情報 ( \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