tmpnam, tmpnam_s
|
헤더 파일에 정의됨
<stdio.h>
|
||
|
char
*
tmpnam
(
char
*
filename
)
;
|
(1) | |
|
errno_t tmpnam_s
(
char
*
filename_s, rsize_t maxsize
)
;
|
(2) | (C11 이후) |
|
#define TMP_MAX /*unspecified*/
|
||
|
#define TMP_MAX_S /*unspecified*/
|
(C11 이후) | |
|
#define L_tmpnam /*unspecified*/
|
||
|
#define L_tmpnam_s /*unspecified*/
|
(C11 이후) | |
-
- filename_s 가 null 포인터인 경우
- maxsize 가 RSIZE_MAX 보다 큰 경우
- maxsize 가 생성된 파일 이름 문자열보다 작은 경우
-
모든 경계 검사 함수와 마찬가지로,
tmpnam_s는 구현에 의해 __STDC_LIB_EXT1__ 가 정의되고 사용자가 <stdio.h> 를 포함하기 전에 __STDC_WANT_LIB_EXT1__ 를 정수 상수 1 로 정의한 경우에만 사용 가능함이 보장됩니다.
tmpnam 와 tmpnam_s 는 정적 상태(이 함수들 간에 공유될 수 있음)를 수정하며 스레드 안전성이 요구되지 않습니다.
목차 |
매개변수
| filename | - | 최소 L_tmpnam 바이트를 보관할 수 있는 문자 배열에 대한 포인터로, 결과 버퍼로 사용됩니다. 널 포인터가 전달되면 내부 정적 버퍼에 대한 포인터가 반환됩니다. |
| filename_s | - | 최소 L_tmpnam_s 바이트를 보관할 수 있는 문자 배열에 대한 포인터로, 결과 버퍼로 사용됩니다. |
| maxsize | - |
함수가 기록할 수 있는 최대 문자 수(일반적으로
filename_s
배열의 크기).
|
반환값
참고 사항
tmpnam
에 의해 생성된 이름은 추측하기 어렵지만,
tmpnam
이 반환된 시점과 이 프로그램이 반환된 이름을 사용해 파일을 생성하려는 시점 사이에 다른 프로세스에 의해 해당 이름을 가진 파일이 생성될 가능성이 있습니다. 표준 함수
tmpfile
과 POSIX 함수
mkstemp
은 이러한 문제가 없습니다(표준 C 라이브러리만 사용하여 고유 디렉터리를 생성하려면 여전히
tmpnam
사용이 필요합니다).
POSIX 시스템은 추가로 유사한 이름의 함수
tempnam
를 정의하며, 이 함수는 디렉터리 선택 옵션을 제공합니다(기본값은 선택적으로 정의된 매크로
P_tmpdir
입니다).
예제
#include <stdio.h> #include <stdlib.h> #include <string.h> int main(void) { // 참고: 컴파일러/링커가 보안 경고를 발생시킬 수 있음, 예: GCC: // "warning: the use of `tmpnam' is dangerous, better use `mkstemp'" char* name1 = tmpnam(NULL); printf("temporary file name: %s\n", name1); char name2[L_tmpnam]; if (tmpnam(name2)) printf("temporary file name: %s\n", name2); // POSIX는 mkstemp를 제공합니다. 다음 선언은 // 표준 C <stdlib.h>에 mkstemp가 없을 수 있으므로 필요할 수 있습니다. int mkstemp(char*); char name3[] = "/tmp/fileXXXXXX"; // 최소 여섯 개의 'X'가 필요합니다 ^_^ int file_descriptor = mkstemp(name3); if (file_descriptor != -1) printf("temporary file name: %s\n", name3); else perror("mkstemp"); }
가능한 출력:
temporary file name: /tmp/file90dLlR temporary file name: /tmp/fileY9LWAg temporary file name: /tmp/filexgv8PF
참조문헌
- C23 표준 (ISO/IEC 9899:2024):
-
- 7.21.4.4 tmpnam 함수 (p: TBD)
-
- K.3.5.1.2 tmpnam_s 함수 (p: TBD)
- C17 표준 (ISO/IEC 9899:2018):
-
- 7.21.4.4 tmpnam 함수 (p: 222)
-
- K.3.5.1.2 tmpnam_s 함수 (p: 427-428)
- C11 표준 (ISO/IEC 9899:2011):
-
- 7.21.4.4 The tmpnam function (p: 303-304)
-
- K.3.5.1.2 The tmpnam_s function (p: 587-588)
- C99 표준 (ISO/IEC 9899:1999):
-
- 7.19.4.4 tmpnam 함수 (p: 269-270)
- C89/C90 표준 (ISO/IEC 9899:1990):
-
- 4.9.4.4 tmpnam 함수
참고 항목
|
(C11)
|
임시 파일에 대한 포인터를 반환합니다
(함수) |
|
C++ documentation
for
tmpnam
|
|