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 |
変更されない |
str
が NULL
の場合は、「パラメーターの検証」で説明されているように、無効なパラメーター ハンドラーが呼び出されます。 実行の継続が許可された場合、これらの関数は errno
を EINVAL
に設定し、EINVAL
を返します。
解説
これらの各関数は、現在存在しないファイルの名前を返します。 tmpnam_s
は、 GetTempPathW
によって返される指定された Windows 一時ディレクトリ内で一意の名前を返します。 ファイル名の先頭に円記号が付いていて、パス情報 ( \fname21
など) がない場合は、その名前が現在の作業ディレクトリに対して有効であることを示します。
tmpnam_s
については、この生成されたファイル名を str
で格納することができます。 tmpnam_s
によって返される文字列の最大長は、STDIO.H に定義されているとおり L_tmpnam_s
です。 str
が NULL
の場合、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_s
と tmpnam_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.