NAME

mktemp - 유일한 임시 파일명 만들기

SYNOPSIS

#include <stdlib.h>

char *mktemp(char *template);

glibc 기능 확인 매크로 요건 (feature_test_macros(7) 참고):

mktemp():
glibc 2.12부터:
(_XOPEN_SOURCE >= 500) && ! (_POSIX_C_SOURCE >= 200112L)
|| /* glibc 2.19부터: */ _DEFAULT_SOURCE
|| /* glibc <= 2.19: */ _SVID_SOURCE || _BSD_SOURCE
glibc 2.12 전:
_BSD_SOURCE || _SVID_SOURCE || _XOPEN_SOURCE >= 500

DESCRIPTION

이 함수를 절대 쓰지 말 것. BUGS 참고.

mktemp() 함수는 template을 가지고 유일한 임시 파일명을 만들어 낸다. template의 마지막 여섯 글자가 XXXXXX여야 하며 그 글자들을 바꿔서 유일한 파일명을 만든다. 변경이 이뤄지므로 template이 문자열 상수여서는 안 되며 문자 배열로 선언하는 게 좋다.

RETURN VALUE

mktemp() 함수는 항상 template을 반환한다. 유일한 이름을 생성했다면 결과 이름이 유일하도록 (즉 그 이름이 이미 존재하지 않도록) template의 마지막 여섯 바이트가 변경되어 있을 것이다. 유일한 이름을 생성할 수 없었다면 template을 빈 문자열로 만들고 오류를 나타내도록 errno를 설정한다.

ERRORS

EINVAL
template의 마지막 여섯 글자가 XXXXXX가 아니다.

ATTRIBUTES

이 절에서 사용하는 용어들에 대한 설명은 attributes(7)를 보라.

인터페이스 속성
mktemp() 스레드 안전성 MT-Safe

CONFORMING TO

4.3BSD, POSIX.1-2001. POSIX-1.2008에서 mktemp() 명세가 없어졌다.

BUGS

mktemp()를 절대 쓰지 마라. 어떤 구현들에서는 4.3BSD를 따라 XXXXXX를 현재 프로세스 ID와 글자 하나로 바꾼다. 그래서 최대 26개까지만 다른 이름을 반환할 수 있다. 일단 이름을 추측하는 게 쉽고 다른 한편으로 이름 존재 여부 검사와 파일 열기 사이에 경쟁이 있기 때문에 mktemp() 사용은 모두 보안 위험 요소다. mkstemp(3)mkdtemp(3)로 그 경쟁을 피한다.

SEE ALSO

mktemp(1), mktemp(3), mkstemp(3), tempnam(3), tmpfile(3), tmpnam(3)


2021-03-22