[리눅스 시스템 프로그래밍] 7.3 환경 변수, getenv, putenv 함수

이미 앞에서 main 함수의 세 번째 입력 매개변수는 환경 변수 목록이라는 것을 얘기했었죠.

int main(int argc, char **argv, char **envp);

argc – 명령행 인자 개수

argv – 명령행 인자 벡터

envp – 환경 변수 목록

환경 변수 목록의 각 항목은 키와 값으로 구성하고 =로 구분합니다. env[0]값이 “HOME=/home/ehpub” 라면 HOME은 키, /home/ehpub는 값입니다.

 

환경 변수 목록에 마직막 항목 뒤에는 NULL값을 갖고 있습니다. 다음은 main 함수의 세 번째 입력 매개변수를 이용하여 환경 변수 목록을 확인하는 예제 코드입니다.

[그림 7.4] ex_envp 실행 화면
[그림 7.4] ex_envp 실행 화면
 그런데 C 프로그램에서는 environ이라는 전역 변수가 미리 만들어져 있으며 이를 통해 환경 변수 목록을 확인할 수 있어요. 다른 곳에서 미리 선언한 상태이므로 extern 문으로 environ 변수를 참조하면 환경 변수 목록을 확인할 수 있어요. 다음은 environ 변수를 참조하여 환경 변수 목록을 확인하는 예제 코드입니다.

 

C언어에서는 환경 변수에 목록에 항목을 추가하는 putenv, 확인하는 getenv 함수와 값을 설정하는 setenv 함수를 제공하고 있어요.

#include <stdlib.h >

char *getenv(const char *key);

int putenv(char *entry);

int setenv(const char *key, const char *value, int rewrite);

rewrite – 이미 같은 key 항목이 있을 때 새로운 값으로 수정할 지 여부

 
putenv 함수는 키 값을 전달하면 value를 반환합니다. 만약 존재하지 않는다면 NULL을 반환합니다. 다음은 원하는 항목의 키를 명령행 인자로 전달받아 해당 항목의 값을 출력하는 예제 코드입니다.

[그림 7.5] ex_getenv 실행 화면
[그림 7.5] ex_getenv 실행 화면
 다음은 명령행 인자의 두 번째 인자가 키인 환경 변수가 있다면 세 번째 인자로 값을 설정하고 없다며 환경 변수 목록에 추가하는 예제 코드입니다.

 

[그림 7.6] ex_putenv 실행 화면
[그림 7.6] ex_putenv 실행 화면