_tempnam
, _wtempnam
, tmpnam
_wtmpnam
임시 파일을 만드는 데 사용할 수 있는 이름을 생성합니다. 이러한 함수 중 일부의 더 안전한 버전을 사용할 수 있습니다. 를 참조하세요tmpnam_s
. _wtmpnam_s
구문
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
);
매개 변수
prefix
에 의해 _tempnam
반환된 이름 앞에 추가된 문자열입니다.
dir
TMP 환경 변수가 없거나 TMP가 유효한 디렉터리가 아닌 경우 파일 이름에 사용되는 경로입니다.
str
함수에서 반환한 이름과 동일한 생성된 이름을 보유하는 포인터입니다. 생성된 이름을 저장하는 편리한 방법입니다.
반환 값
이러한 각 함수는 생성된 이름 또는 NULL
오류가 있는 경우 포인터를 반환합니다. 이상 TMP_MAX
시도하면 오류가 발생할 수 있습니다(STDIO 참조). H) 환경 변수 dir
및 tmpnam
매개 변수에 TMP
지정된 잘못된 디렉터리 이름을 사용하거나 사용하는 _tempnam
경우 호출합니다.
참고 항목
tmpnam
및 _wtmpnam
에서 반환하는 포인터는 내부 정적 버퍼를 가리킵니다. free
는 해당 포인터의 할당을 취소하기 위해 호출되지 않아야 합니다. free
는 _tempnam
및 _wtempnam
에서 할당한 포인터에 대해 호출해야 합니다.
설명
이러한 각 함수는 현재 존재하지 않는 파일의 이름을 반환합니다. tmpnam
에서 반환한 지정된 Windows 임시 디렉터리에서 고유한 이름을 반환 GetTempPathW
합니다. _tempnam
는 지정된 디렉터리가 아닌 디렉터리에서 고유한 이름을 생성합니다. 파일 이름 앞에 백슬래시가 추가되고 경로 정보(예: \fname21
경로 정보가 없는 경우)는 현재 작업 디렉터리에 이름이 유효하다는 것을 나타냅니다.
tmpnam
의 경우에는 생성된 이 파일 이름을 str
에 저장할 수 있습니다. str
이 NULL
이면 tmpnam
은 결과를 내부 정적 버퍼에 유지합니다. 따라서 모든 후속 호출에서는 이 값을 제거합니다. tmpnam
에서 생성하는 이름은 프로그램에서 생성한 파일 이름과 파일 확장명(tmpnam
에 대한 첫 번째 호출 이후 붙는 base32 형식의 순차적 숫자)으로 구성됩니다. 예를 들어 STDIO.H의 TMP_MAX
가 32,767인 경우의 파일 이름은 .1-.vvu입니다.
_tempnam
는 다음 규칙에서 선택한 디렉터리의 고유한 파일 이름을 생성합니다.
TMP 환경 변수가 정의되고 유효한 디렉터리 이름으로 설정된 경우 TMP에서 지정한 디렉터리에 대해 고유한 파일 이름이 생성됩니다.
TMP 환경 변수가 정의되지 않았거나 존재하지
_tempnam
않는 디렉터리의 이름으로 설정된 경우 매개 변수를 고유한 이름을 생성하는 경로로 사용합니다dir
.TMP 환경 변수가 정의되지 않았거나 존재하지 않는 디렉터리의 이름으로 설정된 경우 및 존재하지 않는
_tempnam
디렉터리의 이름으로 설정된 경우dir
NULL
현재 작업 디렉터리를 사용하여 고유한 이름을 생성합니다. 현재 TMP와dir
존재하지 않는 디렉터리의 이름을 지정하는 경우 _tempnam 함수 호출이 실패합니다.
반환된 _tempnam
prefix
이름은 지정된 디렉터리에 대한 고유한 파일 이름을 만들기 위해 결합되는 연결 및 순차 번호입니다. _tempnam
은 확장명이 없는 파일 이름을 생성합니다. _tempnam
에서는 malloc
파일 이름에 대한 공간을 할당합니다. 프로그램은 더 이상 필요하지 않은 경우 이 공간을 해제해야 합니다.
_tempnam
및 tmpnam
은 운영 체제에서 가져온 OEM 코드 페이지에 따라 멀티바이트 문자 시퀀스를 인식하여 멀티바이트 문자열 인수를 자동으로 적절히 처리합니다. _wtempnam
은 _tempnam
의 와이드 문자 버전이고, _wtempnam
의 인수와 반환 값은 와이드 문자열입니다. _wtempnam
멀티 _tempnam
바이트 문자열을 _wtempnam
처리하지 않는다는 점을 제외하고 동일하게 동작합니다. _wtmpnam
는 tmpnam
의 와이드 문자 버전이고, _wtmpnam
의 인수와 반환 값은 와이드 문자 문자열입니다. _wtmpnam
멀티 tmpnam
바이트 문자열을 _wtmpnam
처리하지 않는다는 점을 제외하고 동일하게 동작합니다.
정의된 경우 _DEBUG
및 _wtempnam
에 대한 호출로 _tempnam_dbg
_wtempnam_dbg
대체됩니다._CRTDBG_MAP_ALLOC
_tempnam
일반 텍스트 루틴 매핑
TCHAR.H 루틴 | _UNICODE 및 _MBCS 정의되지 않음 |
정의된 _MBCS |
정의된 _UNICODE |
---|---|---|---|
_ttmpnam |
tmpnam |
tmpnam |
_wtmpnam |
_ttempnam |
_tempnam |
_tempnam |
_wtempnam |
요구 사항
루틴에서 반환된 값 | 필수 헤더 |
---|---|
_tempnam |
<stdio.h> |
_wtempnam , _wtmpnam |
<stdio.h> 또는 <wchar.h> |
tmpnam |
<stdio.h> |
호환성에 대한 자세한 내용은 호환성을 참조하세요.
예시
// 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'll 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.