
각 프로그램에는 환경목록이 전달된다. 명령행 인수 목록(Command-line argument list)처럼 환경 목록(Environment list)은 문자열 포인터들의 배열이며, 각 포인터는 널문자로 끝나는 하나의 문자열을 가리킨다.
이러한 포인터들의 배열의 주소가 전역 변수 environ에 들어 있다.
extern char **environ;
역사적으로, 대부분의 유닉스 시스템들은 환경 목록의 주소를 main 함수의 세 번째 인수로 제공했다.
int main(int argc, char *argv[], char *envp[]);
그러나 ISO C는 main 함수의 인수가 두 개라고 명시한다. 그리고 세 번째 인수가 전역 변수 environ와 다른점은 없다. 그래서 POSIX.1은 세 번째 인수가 제공된다고 해도 environ을 사용해야 한다고 명시한다.
#include <stdio.h>
#include <stdlib.h>
extern char **environ;
int main(int argc, char *argv[], char *envp[])
{
int i;
for (i = 0; environ[i] != NULL; i++)
printf("envp[%d]: %s\n", i, environ[i]);
printf("===========================================\n");
for (i = 0; envp[i] != NULL; i++)
printf("envp[%d]: %s\n", i, envp[i]);
exit(0);
}
위의 코드를 실행해보면 environ를 사용하여 출력한 환경 목록과 envp를 사용하여 출력한 환경 목록은 동일하다는 것을 확인할 수 있다.
특정 환경 변수를 조회하거나 설정할 때는 getenv 함수와 putenv 함수를 사용하고 환경 전체를 훑을 때는 environ 포인터를 사용한다.
UNIX 고급 프로그래밍 7장 - 리처드 스티븐스, 스티븐 레이고
http://www.kyobobook.co.kr/product/detailViewKor.laf?mallGb=KOR&ejkGb=KOR&barcode=979118547503