_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여야 합니다. _mktemp
는 base
를 유지하고 첫 번째 후행 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
는 지정된 값 조합 base
에 nameTemplate
대해 최대 26개 고유 파일 이름을 만들 수 있습니다. 따라서 FNZ12345는 _mktemp
가 이 예제에서 사용된 base
및 nameTemplate
값에 대해 만들 수 있는 마지막 고유한 파일 이름입니다.
오류 시 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