[질문]extern char **environ 변수

익명 사용자의 이미지

소스

#include
int main(int argc, char *argv[])
{
int i;
char **ptr;
extern char **environ;
for (i=0; i printf("argv[%d] %s\n", i, argv[i]);
for (ptr=environ; *ptr != 0; ptr++)
printf("%s\n", *ptr);
exit(0);
}

실행시켜보면 쉘환경변수=설정값 이런식으로 출력이 됩니다.
의문점은 어떻게 envrion 외부변수가 초기화 되지도 않았는데
어떻게 그렇게 동작하느냐하는 것입니다.

unistd.h에 다음고 같이 정의되어 있긴 하지만
extern char **environ

함수도 아니고 어떻게 그러수 있죠?

익명 사용자의 이미지

안녕하세요 ^^;

오래전이라 잘 기억나진 않지만 ...

main이 우리가 생각하는 수준에서는 프로그램의 starting point지만 실제
로는 그렇지 않습니다. 프로그램을 실행시키게 되면 다른 외부 모듈이 먼
저 실행되고 그 모듈에서 main을 호출하게 되어 있습니다. 그렇다면 외부
변수의 값이 set될 수도 있겠죠...

더 자세히 알고 싶으시다면 관련 서적을 참고하시면 될 듯 합니다.

즐거운 하루 되시기 바랍니다.

익명 사용자의 이미지

부모 프로세스 즉 쉘에서 상속받는 겁니다.