NAME

putenv - 환경 변수 바꾸거나 추가하기

SYNOPSIS

#include <stdlib.h>

int putenv(char *string);

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

putenv()
_XOPEN_SOURCE
|| /* glibc 2.19부터: */ _DEFAULT_SOURCE
|| /* glibc <= 2.19: */ _SVID_SOURCE

DESCRIPTION

putenv() 함수는 환경 변수 값을 추가하거나 바꾼다. 인자 stringname=value 형태다. name이 환경에 존재하지 않으면 string을 환경에 추가한다. name이 이미 존재하는 경우에는 환경 안의 name의 값을 value로 바꾼다. string이 가리키는 문자열이 환경의 일부가 되며, 따라서 그 문자열을 변경하면 환경이 바뀐다.

RETURN VALUE

putenv() 함수는 성공 시 0을 반환한다. 실패 시 0 아닌 값을 반환하며 오류를 나타내도록 errno를 설정한다.

ERRORS

ENOMEM
새 환경을 할당할 공간이 충분치 않음.

ATTRIBUTES

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

인터페이스 속성
putenv() 스레드 안전성 MT-Unsafe const:env

CONFORMING TO

POSIX.1-2001, POSIX.1-2008, SVr4, 4.3BSD.

NOTES

putenv() 함수가 재진입 가능이 아닐 수도 있다. glibc 2.0에서는 아니지만 glibc 2.1 버전은 재진입 가능이다.

버전 2.1.2부터 glibc 구현이 SUSv2를 준수한다. 즉 putenv()에 준 포인터 string을 사용한다. 특히 그 문자열이 환경의 일부가 되고, 그래서 이후 변경하면 환경이 바뀌게 된다. (따라서 자동 변수를 인자로 해서 putenv()를 호출한 다음 string이 여전히 환경의 일부인 상태로 호출 함수에서 반환하는 것은 오류다.) 하지만 glibc 버전 2.0부터 2.1.1까지는 다른데, 문자열의 복사본을 쓴다. 이는 한편으로 메모리 누수를 일으키고 다른 한편으로 SUSv2를 위반한다.

4.4BSD 버전은 glibc 2.0처럼 복사본을 쓴다.

SUSv2에서 원형의 const를 없앴고 glibc 2.1.3에서 그렇게 했다.

GNU C 라이브러리 구현에서는 비표준 확장을 제공한다. 다음처럼 string에 등호가 포함돼 있지 않으면 그 변수를 호출자의 환경에서 제거한다.

putenv("NAME");

SEE ALSO

clearenv(3), getenv(3), setenv(3), unsetenv(3), environ(7)


2021-03-22