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
    生成された名前を格納するポインター。

  • [入力] sizeInChars
    文字バッファーのサイズ。

戻り値

これらの関数はエラーの数が正常終了した場合は 0 を返します。

エラー条件

str

sizeInChars

戻り値

の内容 str

NULL

任意

EINVAL

変更されない

NULL ない (有効なメモリを指し示している)

非常に短い

ERANGE

変更されない

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

解説

これらの関数は現在存在しないファイルの名前を返します。tmpnam_s は現在の作業ディレクトリに一意の名前を返します。ファイル名がバックス ラッシュとパス情報などの \ fname21 アタッチされていない場合この説明は名前が現在の作業ディレクトリに対して有効であることを示します。

tmpnam_s についてはこの str で生成されたファイル名を保存できます。tmpnam_s によって返される文字列の最大長は STDIO.H. で定義されている L_tmpnam_s です。str が NULL の場合tmpnam_s は静的バッファーに結果を保持します。したがって後続の呼び出しはこの値を破棄します。tmpnam_s によって生成された名前はtmpnam_s への最初の呼び出しの後に基数 32 (.1-.1vvvvvu の連続する番号のプログラム生成されたファイル名とファイル拡張子から STDIO.H の TMP_MAX_S が INT_MAX 時)およびです。

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

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

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

TCHAR.H のルーチン

_UNICODE および _MBCS が未定義の場合

_MBCS が定義されている場合

_UNICODE が定義されている場合

_ttmpnam_s

tmpnam_s

tmpnam_s

_wtmpnam_s

必要条件

ルーチン

必須ヘッダー

tmpnam_s

<stdio.h>

_wtmpnam_s

<stdio.h> または <wchar.h>

互換性の詳細については、「C ランタイム ライブラリ」の「互換性」を参照してください。

使用例

// 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 );
      }
   }  
}

同等の .NET Framework 関数

該当なし標準 C 関数を呼び出すには、PInvoke を使用します。詳細については、「プラットフォーム呼び出しの例」を参照してください。

参照

関連項目

ストリーム入出力

_getmbcp

malloc

_setmbcp

tmpfile_s