_mktemp, _wmktemp

고유한 파일 이름을 만듭니다. 이러한 함수의 더 안전한 버전을 사용할 수 있습니다. 를 참조하세요_mktemp_s. _wmktemp_s

구문

char *_mktemp(
   char *nameTemplate
);
wchar_t *_wmktemp(
   wchar_t *nameTemplate
);
template <size_t size>
char *_mktemp(
   char (&nameTemplate)[size]
); // C++ only
template <size_t size>
wchar_t *_wmktemp(
   wchar_t (&nameTemplate)[size]
); // C++ only

매개 변수

nameTemplate
파일 이름 패턴입니다.

반환 값

이러한 각 함수는 수정된 nameTemplate에 대한 포인터를 반환합니다. 함수는 잘못된 형식이거나 지정된 nameTemplate에서 더 이상 고유한 이름을 만들 수 없는 경우 nameTemplate 반환 NULL 합니다.

설명

_mktemp 함수는 nameTemplate 인수를 수정하여 고유한 파일 이름을 만듭니다. _mktemp는 런타임 시스템에서 최근에 사용 중인 멀티바이트 코드 페이지에 따라 멀티바이트 문자 시퀀스를 인식하면서 자동으로 멀티바이트 문자열 인수를 적절하게 처리합니다. _wmktemp_mktemp의 와이드 문자 버전이고, _wmktemp의 인수와 반환 값은 와이드 문자 문자열입니다. _wmktemp 멀티 _mktemp 바이트 문자열을 처리하지 않는다는 점을 제외하고 _wmktemp , 그렇지 않으면 동일하게 동작합니다.

기본적으로 이 함수의 전역 상태는 애플리케이션으로 범위가 지정됩니다. 이 동작을 변경하려면 CRT의 전역 상태를 참조하세요.

일반 텍스트 루틴 매핑

Tchar.h 루틴 _UNICODE 정의 _MBCS 되지 않음 _MBCS 정의 _UNICODE 정의
_tmktemp _mktemp _mktemp _wmktemp

nameTemplate 인수의 형식은 baseXXXXXX입니다. 여기서 base는 지정하는 새 파일 이름에 속하며 각 X는 _mktemp에서 제공하는 문자열에 대한 자리 표시자입니다. nameTemplate의 각 자리 표시자 문자는 대문자 X여야 합니다. _mktempbase를 유지하고 첫 번째 후행 X를 영문자로 바꿉니다. _mktemp 는 후행 X 문자를 5자리 값으로 바꿉니다. 이 값은 호출 프로세스 또는 다중 스레드 프로그램에서 호출 스레드를 식별하는 고유 번호입니다.

_mktemp에 대한 호출에 성공할 때마다 nameTemplate이 수정됩니다. 동일한 nameTemplate 인수를 사용하는 동일한 프로세스 또는 스레드로부터의 각 후속 호출에서 _mktemp는 이전 호출에서 _mktemp가 반환한 이름과 일치하는 파일 이름을 검사합니다. 지정된 이름에 대한 파일이 없는 경우 _mktemp는 해당 이름을 반환합니다. 이전에 반환된 이름에 대한 파일이 존재하는 경우 _mktemp는 이전에 반환된 이름에서 사용한 영문자를 다음에 사용할 수 있는 소문자('a'에서 'z'로의 순서)로 대체하여 새 이름을 만듭니다. 예를 들어 base가 다음과 같고

fn

_mktemp에서 제공하는 5자리 숫자 값이 12345인 경우 첫 번째 반환된 이름은 다음과 같습니다.

fna12345

이 이름이 FNA12345 파일을 만드는 데 사용되고 이 파일이 계속 존재하는 경우 base에 대해 동일한 nameTemplate를 사용하여 동일한 프로세스 또는 스레드로부터의 호출에서 반환된 다음 이름은 아래와 같습니다.

fnb12345

FNA12345 없는 경우 반환된 다음 이름은 다시 다음과 같습니다.

fna12345

_mktemp 는 지정된 값 조합 basenameTemplate 대해 최대 26개 고유 파일 이름을 만들 수 있습니다. 따라서 FNZ12345는 _mktemp가 이 예제에서 사용된 basenameTemplate 값에 대해 만들 수 있는 마지막 고유한 파일 이름입니다.

오류 시 errno가 설정됩니다. 잘못된 형식(예: X자 6자 미만) errno 이 있는 경우 nameTemplate 로 설정EINVAL됩니다. 가능한 26개의 파일 이름이 모두 이미 있으므로 _mktemp 고유한 이름을 만들 수 없는 경우 _mktemp nameTemplate을 빈 문자열로 설정하고 반환합니다EEXIST.

C++에서 이러한 함수는 보다 최신의 보안 대응 함수를 호출하는 템플릿 오버로드를 갖고 있습니다. 자세한 내용은 보안 템플릿 오버로드를 참조 하세요.

요구 사항

루틴에서 반환된 값 필수 헤더
_mktemp <io.h>
_wmktemp <io.h> 또는 <wchar.h>

호환성에 대한 자세한 내용은 호환성을 참조하세요.

예시

// crt_mktemp.c
// compile with: /W3
/* The program uses _mktemp to create
* unique filenames. It opens each filename
* to ensure that the next name is unique.
*/

#include <io.h>
#include <string.h>
#include <stdio.h>
#include <errno.h>

char *template = "fnXXXXXX";
char *result;
char names[27][9];

int main( void )
{
   int i;
   FILE *fp;

   for( i = 0; i < 27; i++ )
   {
      strcpy_s( names[i], sizeof( names[i] ), template );
      /* Attempt to find a unique filename: */
      result = _mktemp( names[i] );  // C4996
      // Note: _mktemp is deprecated; consider using _mktemp_s instead
      if( result == NULL )
      {
         printf( "Problem creating the template\n" );
         if (errno == EINVAL)
         {
             printf( "Bad parameter\n");
         }
         else if (errno == EEXIST)
         {
             printf( "Out of unique filenames\n");
         }
      }
      else
      {
         fopen_s( &fp, result, "w" );
         if( fp != NULL )
            printf( "Unique filename is %s\n", result );
         else
            printf( "Cannot open %s\n", result );
         fclose( fp );
      }
   }
}
Unique filename is fna03912
Unique filename is fnb03912
Unique filename is fnc03912
Unique filename is fnd03912
Unique filename is fne03912
Unique filename is fnf03912
Unique filename is fng03912
Unique filename is fnh03912
Unique filename is fni03912
Unique filename is fnj03912
Unique filename is fnk03912
Unique filename is fnl03912
Unique filename is fnm03912
Unique filename is fnn03912
Unique filename is fno03912
Unique filename is fnp03912
Unique filename is fnq03912
Unique filename is fnr03912
Unique filename is fns03912
Unique filename is fnt03912
Unique filename is fnu03912
Unique filename is fnv03912
Unique filename is fnw03912
Unique filename is fnx03912
Unique filename is fny03912
Unique filename is fnz03912
Problem creating the template.
Out of unique filenames.

참고 항목

파일 처리
fopen, _wfopen
_getmbcp
_getpid
_open, _wopen
_setmbcp
_tempnam, _wtempnam, tmpnam, _wtmpnam
tmpfile