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 を使用します。詳細については、「プラットフォーム呼び出しの例」を参照してください。