NAME

tmpnam, tmpnam_r - 임시 파일 이름 만들기

SYNOPSIS

#include <stdio.h>

char *tmpnam(char *s);
char *tmpnam_r(char *s);

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

tmpnam_r():
glibc 2.19부터:
_DEFAULT_SOURCE
glibc 2.19까지:
_BSD_SOURCE || _SVID_SOURCE

DESCRIPTION

주의: 이 함수들을 쓰지 말 것. 대신 mkstemp(3)tmpfile(3)을 사용하라.

tmpnam() 함수는 유효한 파일명인 문자열의 포인터를 반환한다. 어느 시점에는 그 이름으로 된 파일이 존재하지 않으므로 순진한 프로그래머라면 임시 파일에 적당한 이름이라고 생각할 수도 있다. 인자 s가 NULL이면 내부 정적 버퍼에다 이름을 생성하므로 다음 번 tmpnam() 호출로 덮어 써질 수도 있다. s가 NULL이 아니면 s가 가리키는 (길이가 최소 L_tmpnam인) 문자 배열로 이름을 복사하며 성공 시 값 s를 반환한다.

생성되는 경로명에는 디렉터리 선두부 P_tmpdir이 있다. (L_tmpnamP_tmpdir 모두 <stdio.h>에 정의돼 있다. 아래서 언급하는 TMP_MAX도 마찬가지.)

tmpnam_r() 함수는 tmpnam()과 같은 일을 수행하되 s가 NULL이면 (오류를 나타내는) NULL을 반환한다.

RETURN VALUE

이 함수들은 유일한 임시 파일명의 포인터를 반환한다. 유일한 이름을 생성할 수 없으면 NULL을 반환한다.

ERRORS

어떤 오류도 정의되어 있지 않다.

ATTRIBUTES

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

인터페이스 속성
tmpnam() 스레드 안전성 MT-Unsafe race:tmpnam/!s
tmpnam_r() 스레드 안전성 MT-Safe

CONFORMING TO

tmpnam(): SVr4, 4.3BSD, C89, C99, POSIX.1-2001. POSIX.1-2008에서 tmpnam()을 구식으로 표시하였다.

tmpnam_r()은 비표준 확장이며 몇몇 다른 시스템에서도 사용 가능하다.

NOTES

tmpnam() 함수는 TMP_MAX 번까지는 호출 때마다 다른 문자열을 만들어 낸다. TMP_MAX 번 넘게 호출하는 경우의 동작 방식은 구현에서 규정한다.

이 함수들이 추측하기 어려운 이름을 만들어 내기는 하지만 그래도 경로명이 반환되는 시점과 프로그램에서 그 경로명을 여는 시점 사이에 다른 프로그램이 open(2)으로나 심볼릭 링크 형태로 그 경로명을 만들어 낼 수도 있다. 그리고 그게 보안상의 구멍으로 이어질 수 있다. 그런 가능성을 피하려면 경로명을 열 때 open(2)O_EXCL 플래그를 사용하면 된다. 또는 더 바람직하게는 mkstemp(3)tmpfile(3)을 쓰면 된다.

스레드를 사용하는 이식 가능한 응용에서는 _POSIX_THREADS_POSIX_THREAD_SAFE_FUNCTIONS가 정의돼 있는 경우 NULL 인자로 tmpnam()을 호출할 수 없다.

BUGS

이 함수들을 절대 쓰지 마라. 대신 mkstemp(3)tmpfile(3)을 사용하라.

SEE ALSO

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


2021-03-22