_tempnam、_wtempnam、tmpnam、_wtmpnam_tempnam, _wtempnam, tmpnam, _wtmpnam

一時ファイルの作成に使用できる名前を生成します。Generate names you can use to create temporary files. これらの関数のセキュリティを強化したバージョンを使用できます。「tmpnam_s、_wtmpnam_s」を参照してください。More secure versions of some of these functions are available; see tmpnam_s, _wtmpnam_s.

構文Syntax

char *_tempnam(
   const char *dir,
   const char *prefix
);
wchar_t *_wtempnam(
   const wchar_t *dir,
   const wchar_t *prefix
);
char *tmpnam(
   char *str
);
wchar_t *_wtmpnam(
   wchar_t *str
);

パラメーターParameters

prefixprefix
_Tempnamによって返される名前の前に付加される文字列。The string that will be pre-pended to names returned by _tempnam.

エイリアスdir
TMP 環境変数がない場合、または TMP が有効なディレクトリではない場合にファイル名で使用されるパス。The path used in the file name if there is no TMP environment variable, or if TMP is not a valid directory.

strstr
生成された名前を保持し、関数によって返される名前と同じになるポインター。Pointer that will hold the generated name and will be identical to the name returned by the function. これは、生成された名前を保存する便利な方法です。This is a convenient way to save the generated name.

戻り値Return Value

これらの各関数は、生成された名前へのポインター、またはエラーが発生した場合はNULLを返します。Each of these functions returns a pointer to the name generated or NULL if there is a failure. TMP_MAXを超える場合、エラーが発生することがあります (「STDIO」を参照してください)。H) tmpnamを使用してを呼び出します。また、 _tempnamを使用し、TMP 環境変数とdirパラメーターに無効なディレクトリ名が指定されている場合は、を呼び出します。Failure can occur if you attempt more than TMP_MAX (see STDIO.H) calls with tmpnam or if you use _tempnam and there is an invalid directory name specified in the TMP environment variable and in the dir parameter.

注意

Tmpnam_wtmpnamは、内部の静的バッファーを指すポインターを返します。The pointers returned by tmpnam and _wtmpnam point to internal static buffers. これらのポインターの割り当てを解除するために free を呼び出さないでください。free should not be called to deallocate those pointers. _tempnamおよび _wtempnamによって割り当てられたポインターに対しては、 freeを呼び出す必要があります。free needs to be called for pointers allocated by _tempnam and _wtempnam.

RemarksRemarks

これらの各関数は、現在存在しないファイルの名前を返します。Each of these functions returns the name of a file that does not currently exist. tmpnamは、 GetTempPathWによって返される指定された Windows 一時ディレクトリ内で一意の名前を返します。tmpnam returns a name that's unique in the designated Windows temporary directory returned by GetTempPathW. tempnam は、指定されたディレクトリ以外のディレクトリに一意の名前を生成します。 __tempnam generates a unique name in a directory other than the designated one. ファイル名の前に円記号が付いていてパス情報がない場合 (\fname21 など)、その名前は現在の作業ディレクトリに対して有効なので注意してください。Note than when a file name is pre-pended with a backslash and no path information, such as \fname21, this indicates that the name is valid for the current working directory.

Tmpnamでは、この生成されたファイル名をstrに格納できます。For tmpnam, you can store this generated file name in str. StrNULLの場合、 tmpnamは、結果を内部の静的バッファーに残します。If str is NULL, then tmpnam leaves the result in an internal static buffer. したがって後続の呼び出しは、この値を破棄します。Thus any subsequent calls destroy this value. Tmpnamによって生成される名前は、プログラムによって生成されるファイル名で構成され、 tmpnamの最初の呼び出しの後に、ベース 32 (1-) の連続する番号のファイル拡張子 (STDIO のTMP_MAX時) で構成されます。H は 32767)。The name generated by tmpnam consists of a program-generated file name and, after the first call to tmpnam, a file extension of sequential numbers in base 32 (.1-.vvu, when TMP_MAX in STDIO.H is 32,767).

_tempnamは、次の規則で選択されたディレクトリに対して一意のファイル名を生成します。_tempnam will generate a unique file name for a directory chosen by the following rules:

  • TMP 環境変数が定義され、有効なディレクトリ名に設定された場合は、TMP で指定したディレクトリに対して一意のファイル名が生成されます。If the TMP environment variable is defined and set to a valid directory name, unique file names will be generated for the directory specified by TMP.

  • TMP 環境変数が定義されていない場合、または存在しないディレクトリの名前に設定されている場合、 _tempnamは一意の名前を生成するパスとしてdirパラメーターを使用します。If the TMP environment variable is not defined or if it is set to the name of a directory that does not exist, _tempnam will use the dir parameter as the path for which it will generate unique names.

  • TMP 環境変数が定義されていない場合、または存在しないディレクトリの名前に設定されている場合、およびdirNULLであるか、または存在しないディレクトリの名前に設定されている場合、 _tempnamは現在の作業ディレクトリを使用して gene します。一意の名前を評価します。If the TMP environment variable is not defined or if it is set to the name of a directory that does not exist, and if dir is either NULL or set to the name of a directory that does not exist, _tempnam will use the current working directory to generate unique names. 現在、TMP とdirの両方で、存在しないディレクトリの名前が指定されている場合、 _tempnam関数の呼び出しは失敗します。Currently, if both TMP and dir specify names of directories that do not exist, the _tempnam function call will fail.

_Tempnamによって返される名前は、プレフィックスと連続番号を連結したものになります。これは、指定されたディレクトリに対して一意のファイル名を作成するために使用されます。The name returned by _tempnam will be a concatenation of prefix and a sequential number, which will combine to create a unique file name for the specified directory. _tempnamでは、拡張子のないファイル名が生成されます。_tempnam generates file names that have no extension. _tempnammallocを使用して、ファイル名にスペースを割り当てます。プログラムは、不要になったときにこの領域を解放する役割を担います。_tempnam uses malloc to allocate space for the filename; the program is responsible for freeing this space when it is no longer needed.

_tempnamtmpnamは、オペレーティングシステムから取得した OEM コードページに従ってマルチバイト文字のシーケンスを認識し、マルチバイト文字列の引数を適切な方法で自動的に処理します。_tempnam and tmpnam automatically handle multibyte-character string arguments as appropriate, recognizing multibyte-character sequences according to the OEM code page obtained from the operating system. _wtempnamは、 _tempnamのワイド文字バージョンです。 _wtempnamの引数と戻り値はワイド文字列です。_wtempnam is a wide-character version of _tempnam; the arguments and return value of _wtempnam are wide-character strings. _wtempnam_tempnamは、 _wtempnamがマルチバイト文字列を処理しない点を除いて同じように動作します。_wtempnam and _tempnam behave identically except that _wtempnam does not handle multibyte-character strings. _wtmpnamは、 tmpnamのワイド文字バージョンです。 _wtmpnamの引数と戻り値はワイド文字列です。_wtmpnam is a wide-character version of tmpnam; the argument and return value of _wtmpnam are wide-character strings. _wtmpnamtmpnamは、 _wtmpnamがマルチバイト文字列を処理しない点を除いて、同じように動作します。_wtmpnam and tmpnam behave identically except that _wtmpnam does not handle multibyte-character strings.

_Debug_CRTDBG_MAP_ALLOCが定義されている場合、 _tempnam_wtempnam_tempnam_dbg と _wtempnam_dbgの呼び出しに置き換えられます。If _DEBUG and _CRTDBG_MAP_ALLOC are defined, _tempnam and _wtempnam are replaced by calls to _tempnam_dbg and _wtempnam_dbg.

汎用テキスト ルーチンのマップGeneric-Text Routine Mappings

TCHAR.H のルーチンTCHAR.H routine _UNICODE および _MBCS が未定義の場合_UNICODE & _MBCS not defined _MBCS が定義されている場合_MBCS defined _UNICODE が定義されている場合_UNICODE defined
_ttmpnam_ttmpnam tmpnamtmpnam tmpnamtmpnam _wtmpnam_wtmpnam
_ttempnam_ttempnam _tempnam_tempnam _tempnam_tempnam _wtempnam_wtempnam

必要条件Requirements

ルーチンによって返される値Routine 必須ヘッダーRequired header
_tempnam_tempnam <stdio.h><stdio.h>
_wtempnam_wtmpnam_wtempnam, _wtmpnam <stdio.h> または <wchar.h><stdio.h> or <wchar.h>
tmpnamtmpnam <stdio.h><stdio.h>

互換性の詳細については、「互換性」を参照してください。For additional compatibility information, see Compatibility.

Example

// crt_tempnam.c
// compile with: /W3
// This program uses tmpnam to create a unique filename in the
// temporary directory, and _tempname to create a unique filename
// in C:\\tmp.

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
   char * name1 = NULL;
   char * name2 = NULL;
   char * name3 = NULL;

   // Create a temporary filename for the current working directory:
   if ((name1 = tmpnam(NULL)) != NULL) { // C4996
   // Note: tmpnam is deprecated; consider using tmpnam_s instead
      printf("%s is safe to use as a temporary file.\n", name1);
   } else {
      printf("Cannot create a unique filename\n");
   }

   // Create a temporary filename in temporary directory with the
   // prefix "stq". The actual destination directory may vary
   // depending on the state of the TMP environment variable and
   // the global variable P_tmpdir.

   if ((name2 = _tempnam("c:\\tmp", "stq")) != NULL) {
      printf("%s is safe to use as a temporary file.\n", name2);
   } else {
      printf("Cannot create a unique filename\n");
   }

   // When name2 is no longer needed:
   if (name2) {
      free(name2);
   }

   // Unset TMP environment variable, then create a temporary filename in C:\tmp.
   if (_putenv("TMP=") != 0) {
      printf("Could not remove TMP environment variable.\n");
   }

   // With TMP unset, we will use C:\tmp as the temporary directory.
   // Create a temporary filename in C:\tmp with prefix "stq".
   if ((name3 = _tempnam("c:\\tmp", "stq")) != NULL) {
      printf("%s is safe to use as a temporary file.\n", name3);
   }
   else {
      printf("Cannot create a unique filename\n");
   }

   // When name3 is no longer needed:
   if (name3) {
      free(name3);
   }

   return 0;
}
C:\Users\LocalUser\AppData\Local\Temp\sriw.0 is safe to use as a temporary file.
C:\Users\LocalUser\AppData\Local\Temp\stq2 is safe to use as a temporary file.
c:\tmp\stq3 is safe to use as a temporary file.

関連項目See also

ストリーム入出力Stream I/O
_getmbcp_getmbcp
mallocmalloc
_setmbcp_setmbcp
tmpfiletmpfile
tmpfile_stmpfile_s