putenv가 제대로 동작하지 않습니다.
글쓴이: 김경태 / 작성시간: 수, 2004/04/07 - 10:38오전
#include <stdio.h> #include <stdlib.h> int main () { char * buffer ; buffer = getenv ("RESOURCES"); if (buffer==NULL) { putenv ("RESOURCES=www.cplusplus.com"); puts ("environment variable successfully set"); } else puts ("environment variable already existed"); return 0; }
코드는 위와 같습니다. 그런데 매번, 성공했다는 메시지만 나올 뿐이고 실제로
확인해 보면 전혀 세팅이 되지 않았습니다.
왜 그런 것일까요?
참고로 환경을 말씀드리면,
shell : /bin/ksh
os: solaris 5.8
입니다.
고수님들의 좋은 가르침 기대하겠습니다.
Forums:
Re: putenv가 제대로 동작하지 않습니다.
프로세스 종료시에도 putenv 변수가 남아있길 기대하신 것이라면,
지금 처럼 전혀 셋팅되어 있지 않은 것이 정상입니다.
프로세스 내에서 셋팅한 변수에 대해 getenv 해보면 잘 나올 것입니다.
Orion Project : http://orionids.org
그럼 또한가지 여쭙겠습니다.
과연 말씀하신대로 getenv("RESOURCES")해서 보니까 세팅한 값이 나옵니
다.
그런데 제가 원하는 것은 그 프로그램이 종료되어도 env를 통하여 RESOURCE
라는 변수안에 값이 세팅되어 있기를 바라는 것입니다.
이런 결과를 원한다면 프로그램적으로는 어떻게 하는게 바람직할까요?
고수님들의 좋은 가르침을 기대합니다.
-.-
첨에 쉘이 생성되구..쉘도 프로세스죠
쉘이 생성되면서
초기 스크립트에 의해 많은 환경변수들이 설정됩니다.
그리고 명령행에서... 이런 환경변수들을 이용할수 있었던것은
쉘 프로세스가 죽지 않았기 때문에... 쉘 프로세스의 메모리에 담긴
환경변수들을 이용할수 있는 것이죠.
"부모의 환경변수는 자식에게 그대로 상속된다"고 합니다
즉, fork할때 자식 프로세스의 메모리에 copy됩니다.
따라서 쉘상에서 실행한 명령들이 쉘의 환경변수를 이용할수 있습니다.
쉘상에서 실행하는 명령들은 모두 쉘의 자식프로세스들이니깐용
자식이 새로운 환경변수를 추가하면
그것은 자식의 메모리상에서만 존재하고..부모에게 없습니다.
따라서 자식이 죽으면 그걸로 끝입니다.
부모가 즉, 쉘이 그 환경변수를 얻을수 없습니다.
간단한건데 길게 쓰네요 지송합니다.
방법이 없다는것을 이해하셨죠?
정말로...그렇게 하셔야 겠다면
아래처럼 exec를 이용할수 있을것 같습니다.
쉘상에서 또 다른 쉘을 띄우는 코드입니다.
쉘의 자식쉘을 만드는거죠..그러면 부모쉘의 환경변수와,,
a.out의 환경변수 모두를 상속받은 쉘이 뜨게 됩니다.
이상입니다.
불가능합니다.이런 이유때문에, shell script에는 "."
불가능합니다.
이런 이유때문에, shell script에는 "." 이나 "source" 같은 명령이 존재합니다. 현재 shell로 파싱하여 출력하라는...
아무나 모르게 뭔가를 할 수 없습니다.
실행하는 사람이 반드시 현재 쉘로 돌리는지 다른 쉘로 돌리는지를 이해해야합니다.
---
http://coolengineer.com
댓글 달기