직접 환경변수 읽기
글쓴이: Necromancer / 작성시간: 목, 2004/11/25 - 6:15오후
C 라이브러리에서 환경변수 읽는 함수가 있기는 하지만, 직접 읽는 방법도 있습니다.
#include <stdio.h> int main(int argc,char **argv,char **env) { int t; for(t=0;env[t]!=NULL;t++) { printf("%s\n",env[t]); } }
위 main()의 세번째 인수가 환경변수 목록 포인터입니다.
인수 목록은 argc에 의해서 카운트가 주어지는 것과는 달리 환경변수
목록은 카운트없이, 포인터배열의 마지막이 NULL포인터로 끝납니다.
위 프로그램 실행시키면 set 한것과 비슷한 내용이 나올겁니다. 단 정렬이 되어있지 않습니다.
Forums:
이건 컴파일러가 따로 지원해줘야 할 겁니다.int main(int a
이건 컴파일러가 따로 지원해줘야 할 겁니다.
int main(int argc,char **argv,char **env) 형태는 C 컴파일러가 보장해주는 형태가 아니거든요.
맞습니다.
표준에는 env 에 대한 정의가 없습니다.
Real programmers /* don't */ comment their code.
If it was hard to write, it should be /* hard to */ read.
얼마전에 본 c99 에 보니 env 에 대한 정의는 없더군요.하지
얼마전에 본 c99 에 보니 env 에 대한 정의는 없더군요.
하지만, gcc 에서 지원하고 있고 저도 자주 사용하는 방법입니다. 8)
더 이상 없다.
표준이 정의한 방법은 [code:1]extern char** enviro
표준이 정의한 방법은
extern char** environ;
을 선언하는 것입니다. svid 호환이면 어떤 유닉스든 공통이며 제가 해본바로는 작동하지 않는 개발환경을 본 적이 없습니다.homeless
신성국님이 영한번역하신 C FAQs 문서에 따르면
environ 도 표준 아니지 않나요?
제가 잘못 본 건가...
Real programmers /* don't */ comment their code.
If it was hard to write, it should be /* hard to */ read.
[quote="kihlle"]표준이 정의한 방법은 [code:1]exte
이 방법은 POSIX 에서 정의 된거구요
그 위에 **env는 전통적으로 유닉스에서 사용해 오던 방법일껍니다
예전에 어디서 본기억이 있는데 어딘지 가물가물 하네요
[quote="cppiq1995"]environ 도 표준 아니지 않나요?
일반적인 유닉스의 표준은 http://www.unix.org나 http://www.opengroup.org를 참조하시기 바랍니다. 일반적으로 가장 중요한 표준은 POSIX, SVID(issue3까지), AES, XPG4 이렇게 4가지입니다. (실제로 XPG4는 POSIX1,2를 포함하는 부분을 정의하므로 중복된것도 많습니다만. unistd.h에서 #ifdef _XOPEN 으로 정의된 것은 모두 XPG4를 말하는 것입니다) 그중에서도 가장 전통적인 원형은 System V표준인 svid입니다.
extern char **environ 선언에 관한것은 http://www.opengroup.org/onlinepubs/7990989775/xsh/environ.html을 참조하십시오. 비표준이 아니라 가장 전통적인 표준입니다.
먹고사는데 별 도움이 안되는 표준이야기를 하려니 피곤하군요. :D
덧붙임/
오픈그룹문서의 내용입니다.
homeless
댓글 달기