환경 목록(Environment list)

Park Sejin·2021년 7월 12일
0
post-thumbnail

환경 목록(Environment list)의 전달

각 프로그램에는 환경목록이 전달된다. 명령행 인수 목록(Command-line argument list)처럼 환경 목록(Environment list)은 문자열 포인터들의 배열이며, 각 포인터는 널문자로 끝나는 하나의 문자열을 가리킨다.
이러한 포인터들의 배열의 주소가 전역 변수 environ에 들어 있다.

extern char **environ;

역사적으로, 대부분의 유닉스 시스템들은 환경 목록의 주소를 main 함수의 세 번째 인수로 제공했다.

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

그러나 ISO Cmain 함수의 인수가 두 개라고 명시한다. 그리고 세 번째 인수가 전역 변수 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

0개의 댓글