tmpfile, tmpfile_s
From cppreference.net
|
헤더 파일에 정의됨
<stdio.h>
|
||
|
FILE
*
tmpfile
(
void
)
;
|
(1) | |
|
errno_t tmpfile_s
(
FILE
*
restrict
*
restrict
streamptr
)
;
|
(2) | (C11 이후) |
1)
임시 파일을 생성하고 엽니다. 이 파일은 바이너리 파일로 업데이트 모드로 열립니다(
fopen
함수의
"wb+"
모드와 동일). 파일 이름은 파일 시스템 내에서 고유함이 보장됩니다. 프로그램 수명 동안 최소
TMP_MAX
개의 파일이 열릴 수 있으며(이 제한은
tmpnam
과 공유될 수 있음),
FOPEN_MAX
에 의해 추가로 제한될 수 있습니다.
2)
(1)
과 동일하지만, 최소
TMP_MAX_S
개의 파일이 열릴 수 있으며(이 제한은
tmpnam_s
와 공유될 수 있음),
streamptr
가 null 포인터인 경우 현재 설치된
constraint handler
함수가 호출됩니다.
-
모든 bounds-checked 함수와 마찬가지로,
tmpfile_s는 구현에서 __STDC_LIB_EXT1__ 가 정의되고 사용자가 <stdio.h> 를 포함하기 전에 __STDC_WANT_LIB_EXT1__ 를 정수 상수 1 으로 정의한 경우에만 사용 가능함이 보장됩니다.
이 함수에 의해 생성된 임시 파일은 프로그램이 정상적으로 종료될 때 닫히고 삭제됩니다. 비정상적인 종료 시 삭제 여부는 구현에 따라 정의됩니다.
목차 |
매개변수
1)
(없음)
2)
이 함수 호출에 의해 업데이트될 포인터에 대한 포인터
반환값
1)
파일과 연관된 파일 스트림에 대한 포인터 또는 오류가 발생한 경우 널 포인터입니다.
2)
파일이 성공적으로 생성되고 열리면 0, 파일이 생성되지 않거나 열리지 않았거나
streamptr
이 널 포인터인 경우 0이 아닌 값. 또한 성공 시 관련 파일 스트림에 대한 포인터가
*
streamptr
에 저장되고, 오류 시 널 포인터 값이
*
streamptr
에 저장됩니다.
참고 사항
일부 구현(예: 구형 리눅스)에서는 이 함수가 실제로 파일 시스템에서 파일을 생성, 열고 즉시 삭제합니다: 삭제된 파일에 대한 열린 파일 디스크립터가 프로그램에 의해 유지되는 한 파일은 존재하지만, 삭제되었기 때문에 해당 이름은 어떤 디렉토리에도 나타나지 않아 다른 프로세스가 이를 열 수 없습니다. 파일 디스크립터가 닫히거나 프로그램이 종료(정상적 또는 비정상적)되면, 파일이 차지하던 공간은 파일 시스템에 의해 회수됩니다. 최신 리눅스(3.11 이후 또는 파일 시스템에 따라 다름)는
open()
시스템 콜의 특수 플래그를 통해 이러한 보이지 않는 임시 파일을 한 단계로 생성합니다.
일부 구현체(예: Windows)에서는 이 함수가 시스템 디렉토리에 임시 파일을 생성할 수 있으므로 상승된 권한이 필요합니다.
예제
이 코드 실행
#define _POSIX_C_SOURCE 200112L #include <stdio.h> #include <unistd.h> int main(void) { printf("TMP_MAX = %d, FOPEN_MAX = %d\n", TMP_MAX, FOPEN_MAX); FILE* tmpf = tmpfile(); fputs("Hello, world", tmpf); rewind(tmpf); char buf[6]; fgets(buf, sizeof buf, tmpf); printf("got back from the file: '%s'\n", buf); // Linux-specific method to display the tmpfile name char fname[FILENAME_MAX], link[FILENAME_MAX] = {0}; sprintf(fname, "/proc/self/fd/%d", fileno(tmpf)); if (readlink(fname, link, sizeof link - 1) > 0) printf("File name: %s\n", link); }
가능한 출력:
TMP_MAX = 238328, FOPEN_MAX = 16 got back from the file: 'Hello' File name: /tmp/tmpfjptPe5 (deleted)
참고문헌
- C23 표준 (ISO/IEC 9899:2024):
-
- 7.21.4.3 tmpfile 함수 (p: TBD)
-
- K.3.5.1.1 tmpfile_s 함수 (p: TBD)
- C17 표준 (ISO/IEC 9899:2018):
-
- 7.21.4.3 tmpfile 함수 (p: 222)
-
- K.3.5.1.1 tmpfile_s 함수 (p: 427)
- C11 표준 (ISO/IEC 9899:2011):
-
- 7.21.4.3 tmpfile 함수 (p: 303)
-
- K.3.5.1.1 tmpfile_s 함수 (p: 586-587)
- C99 표준 (ISO/IEC 9899:1999):
-
- 7.19.4.3 tmpfile 함수 (p: 269)
- C89/C90 표준 (ISO/IEC 9899:1990):
-
- 4.9.4.3 The tmpfile function
참고 항목
|
(C11)
|
고유한 파일명을 반환합니다
(함수) |
|
C++ documentation
for
tmpfile
|
|