_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) 환경 변수 dirtmpnam 매개 변수에 TMP 지정된 잘못된 디렉터리 이름을 사용하거나 사용하는 _tempnam 경우 호출합니다.

참고 항목

tmpnam_wtmpnam에서 반환하는 포인터는 내부 정적 버퍼를 가리킵니다. free 는 해당 포인터의 할당을 취소하기 위해 호출되지 않아야 합니다. free_tempnam_wtempnam에서 할당한 포인터에 대해 호출해야 합니다.

설명

이러한 각 함수는 현재 존재하지 않는 파일의 이름을 반환합니다. tmpnam 에서 반환한 지정된 Windows 임시 디렉터리에서 고유한 이름을 반환 GetTempPathW합니다. _tempnam 는 지정된 디렉터리가 아닌 디렉터리에서 고유한 이름을 생성합니다. 파일 이름 앞에 백슬래시가 추가되고 경로 정보(예: \fname21경로 정보가 없는 경우)는 현재 작업 디렉터리에 이름이 유효하다는 것을 나타냅니다.

tmpnam의 경우에는 생성된 이 파일 이름을 str에 저장할 수 있습니다. strNULL이면 tmpnam은 결과를 내부 정적 버퍼에 유지합니다. 따라서 모든 후속 호출에서는 이 값을 제거합니다. tmpnam에서 생성하는 이름은 프로그램에서 생성한 파일 이름과 파일 확장명(tmpnam에 대한 첫 번째 호출 이후 붙는 base32 형식의 순차적 숫자)으로 구성됩니다. 예를 들어 STDIO.H의 TMP_MAX가 32,767인 경우의 파일 이름은 .1-.vvu입니다.

_tempnam 는 다음 규칙에서 선택한 디렉터리의 고유한 파일 이름을 생성합니다.

  • TMP 환경 변수가 정의되고 유효한 디렉터리 이름으로 설정된 경우 TMP에서 지정한 디렉터리에 대해 고유한 파일 이름이 생성됩니다.

  • TMP 환경 변수가 정의되지 않았거나 존재하지 _tempnam 않는 디렉터리의 이름으로 설정된 경우 매개 변수를 고유한 이름을 생성하는 경로로 사용합니다 dir .

  • TMP 환경 변수가 정의되지 않았거나 존재하지 않는 디렉터리의 이름으로 설정된 경우 및 존재하지 않는 _tempnam 디렉터리의 이름으로 설정된 경우 dirNULL 현재 작업 디렉터리를 사용하여 고유한 이름을 생성합니다. 현재 TMP와 dir 존재하지 않는 디렉터리의 이름을 지정하는 경우 _tempnam 함수 호출이 실패합니다.

반환된 _tempnamprefix 이름은 지정된 디렉터리에 대한 고유한 파일 이름을 만들기 위해 결합되는 연결 및 순차 번호입니다. _tempnam은 확장명이 없는 파일 이름을 생성합니다. _tempnam 에서는 malloc 파일 이름에 대한 공간을 할당합니다. 프로그램은 더 이상 필요하지 않은 경우 이 공간을 해제해야 합니다.

_tempnamtmpnam은 운영 체제에서 가져온 OEM 코드 페이지에 따라 멀티바이트 문자 시퀀스를 인식하여 멀티바이트 문자열 인수를 자동으로 적절히 처리합니다. _wtempnam_tempnam의 와이드 문자 버전이고, _wtempnam의 인수와 반환 값은 와이드 문자열입니다. _wtempnam 멀티 _tempnam 바이트 문자열을 _wtempnam 처리하지 않는다는 점을 제외하고 동일하게 동작합니다. _wtmpnamtmpnam의 와이드 문자 버전이고, _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.

참고 항목

스트림 I/O
_getmbcp
malloc
_setmbcp
tmpfile
tmpfile_s