TMPFILE(3)

명칭
tempnam, tmpfile, tmpnam - 일시파일 routine

프로그램 라이브러리
libc

서식
<stdio.h> FILE * tmpfile(void) char * tmpnam(char *str) char * tempnam(const char *tmpdir, const char *prefix)

해설
tmpfile() 함수는, mkstemp(3) routine에 의해 돌려주어진 파일 기술자에게 결합된 스트림에의 포인터를 돌려줍니다. 작성된 파일은 tmpfile() 함수로부터 돌아가기 전에 링크가 삭제됩니다. 그 때문에, 그 파일에의 마지막 참조가 닫혀졌을 때에, 파일은 자동적으로 삭제됩니다. 그 파일은, 액세스치 ‘w+’ 에 의해 열립니다. TMPDIR 하지만 설정되어 있는 경우, 파일은, 이 환경 변수에 의해 결정된다 디렉토리에 작성됩니다. TMPDIR 하지만 설정되어 있지 않은 경우의 기본값은 /tmp 입니다.

tmpnam() 함수는, 과거가 있는 불특정의 시점에서 P_tmpdir 디렉토리에 존재하고 있던 파일을 참조하고 있던 것은 아니다 파일명에의 포인터를 돌려줍니다. P_tmpdir (은)는, 인클루드 파일 <stdio.h> 중(안)에서 정의되고 있습니다. 인수 str 하지만 NULL (이)가 아닌 경우는, 파일명은 그것이 참조하는 버퍼에 카피됩니다. 그 이외의 경우는, 파일명은 정적 버퍼에 카피됩니다. 어느 쪽의 경우에서도, tmpnam() 함수는 그 파일명에의 포인터를 돌려줍니다.

str 에 의해 참조되는 버퍼의 길이는, 적어도 L_tmpnam 바이트 없으면 안됩니다. L_tmpnam (은)는, 인클루드 파일 <stdio.h> 중(안)에서 정의되고 있습니다.

tempnam() 함수는, tmpnam() 함수와 같은 물건입니다만, 일시파일을 수용하는 디렉토리와 파일뼹레픽스를 지정하는 기능을 가지고 있습니다.

일시파일을 보존하는 디렉토리로서는, 환경 변수 TMPDIR (이것이 설정되어 있는 경우), 인수 tmpdir (이것이 NULL (이)가 아닌 경우), 디렉토리 P_tmpdir, 디렉토리 /tmp 하지만, 이 차례로 시험 받습니다.

파일뼹레픽스를 지정하기 위해서는, 값이 NULL (이)가 아닌 경우는 인수 prefix 하지만 사용되어 이것이 작성되는 파일명의 최초의 부분이 됩니다. tempnam() 함수는, 파일명을 보존하는 메모리를 할당합니다. 돌려주어진 포인터는, free(3) 에의 다음에 계속되는 인수로서 사용할 수가 있습니다.

반환값
tmpfile() 함수는, 성공했을 경우에는 열린 파일 스트림에의 포인터를, 에러의 경우에는 NULL 포인터를 돌려줍니다.

tmpnam() 및 tempfile() 함수는, 성공했을 경우에는 파일명에의 포인터를, 에러의 경우에는 NULL 포인터를 돌려줍니다.

에러
tmpfile() 함수가 실패했을 경우, 프로그램 라이브러리 함수 fdopen(3) 또는 mkstemp(3) 그리고 규정되는 에러중 한쪽이, 글로벌 변수 errno (으)로 설정되는 경우가 있습니다.

tmpnam() 함수가 실패했을 경우, 프로그램 라이브러리 함수 mktemp(3) 그리고 규정되는 에러중 한쪽이 errno 하지만 설정되는 경우가 있습니다.

tempnam() 함수가 실패했을 경우, 프로그램 라이브러리 함수 malloc(3) 또는 mktemp(3) 그리고 규정되는 에러중 한쪽이 errno 하지만 설정되는 경우가 있습니다.

참조
mkstemp(3), mktemp(3)

표준
tmpfile() 및 tmpnam() 함수는, isoC 에 적합하고 있습니다.

버그
이러한 인터페이스는, System V 및 ANSI (와)과의 호환성만을 위해서(때문에) 제공되고 있습니다. mkstemp(3) 인터페이스의 사용을 강하게 추천 합니다.

이러한 인터페이스에는 (낡다 mktemp(3) 인터페이스와 같게), 4 개(살)의 중대한 문제가 있습니다. 가장 먼저, 파일명 선택과 파일 작성 및 삭제동안에는 분명한 경합이 있습니다. 2번째로, 대부분의 낡은 시스템에서는, 파일명이 리사이클 될 때까지는, 한정된 수 (통상은 26)의 일시파일명 밖에 사용할 수 없는 것입니다. 제3에, 이러한 함수 ( 및 mktemp(3) )의 System V 에 있어서의 실장은, 일시파일 작성의 가부를 결정하기 위해서(때문에) access(2) 함수를 이용하고 있는 것입니다. 이것은, setuid 및 setgid 프로그램에 대해서 분명한 문제를 파생시켜, 이러한 프로그램에 이러한 인터페이스를 이식해 사용하는 것을 복잡하게 합니다. 마지막으로, 일시파일을 작성하는 허가에 관한 지정이 없습니다.

이 실장에는 이러한 결함은 없습니다만, 이식 가능한 소프트웨어는 그것을 의지할 수 없습니다. 특히, tmpfile() 인터페이스는, 유저가 일시파일을 공개해 읽고 쓰기 가능하게 하는 것을 바라지 않을 가능성이 있는 경우는, 다른 시스템상에서 사용되는 것이 예상된다 소프트웨어 중(안)에서는 사용해야 하는 것이 아닙니다.