메인 함수(main func)에서 인수(parameter)들?
글쓴이: tristansong / 작성시간: 금, 2005/05/20 - 7:57오전
메인 함수(main func)에서 인수(parameter)들은 어디서 처리하는지요, 정확히 어떻게 파싱하는지 궁금합니다.
int main( int argc, char**argv)
위 **argv를 어디서 처리하는지 정말 궁금합니다.
File attachments:
첨부 | 파일 크기 |
---|---|
ProgramStartNTermination.JPG | 43.22 KB |
Forums:
프로그램 실행 파라미터에 관한 부분입니다.만일, 실행파일이 a.out
프로그램 실행 파라미터에 관한 부분입니다.
만일, 실행파일이 a.out 일 경우,
> a.out para1 para2
이렇게 입력하시고 실행하면,
argc는 3이고,
argv[0]=a.out
argv[1]=para1
argv[2]=para2
가 들어갑니다.
argv가 더블포인터인거는 스트링의 배열이기 떄문입니다.
한번 코드 짜서 프린트 해 보세요.
명령 파라미터 파싱은 strcmp이용해서 파싱을 다 하셔도 되는데, 특별히 "-h" 같은 옵션 파라미터를 처리하고자 할 경우라면,
getopt() 함수도 함께 활용하세요.
man getopt
질문을 다시해야 겠습니다.
답변 감사합니다.
제가 알고 싶은것은 셀(Shell) 혹은 커널(kernel)에서 인수(parameter)들을 처리하는 함수가 어떤것인가 하는 것입니다.
일단 셀(Shell)에서 라인 코멘드(line command)을 주면 자동(?)으로 파싱하는데 이걸 어디서 처리하는 지가 궁금합니다.
커널은 아니구요.... 셀에서 처리하는데요,쉘두 어차피 응용프로그램이
커널은 아니구요.... 셀에서 처리하는데요,
쉘두 어차피 응용프로그램이라구 생각하셔야 합니다.
님 사용하시는 bash같은거 소스 구해다 보시면, 도움이 될겁니다.
간단한 걸 원하시면, busybox에 있는 ash소스에서, ash_main()함수를 보시면 도움이 될지도...
하나가 풀리니 여러가지 궁금증이 나는군요!
잘 알겠습니다.
그런데 또 궁금증이 생겨서,
1. 유닉스(Unix)나 리눅스(Linux)들에는 셀(Shell)이라는 매개체가 있어서 유저(User)와 커널(Kernel)사이의 의사 소통을 돕는데 그럼, 셀(Shell)에서 파싱(Parsing)을 처리하면 커널(Kernel)에서는 이 파싱(Parsing) 값들을 어떻게 받아 들이는 가요?
2. 위 1와 같이 조건은 vc++같은 프로그램에서 어떻게 파싱(Parsing)이 만들어 지는지요, 즉, 셀(Shell)의 역활은 어떤 프로그램이 담당합니까?
1. 커널에서 받지 않고, 유저스페이스에서 처리합니다.2. 윈95의
1. 커널에서 받지 않고, 유저스페이스에서 처리합니다.
2. 윈95의 경우 explorer.exe가 셸입니다. 윈98부터는 Internet Explorer가 셸의 역할도 합니다.
Re: 질문을 다시해야 겠습니다.
exec 계열의 function에서 하는걸로 기억이..
예전에 스티븐슨 책에서 본것 같은데요...
어차피 그냥 생각해봐도 shell에서 fork해서 프로그램을 실행 시킬테니깐..
exec 함수가 맞을 것 같은데요..^^
다 덤벼! 다 받아줄께!!
답글에 감사합니다. 그리고...
답글에 감사합니다.
"검은해"님께 질문있습니다.
"유저스페이스"란 통상 무엇을 가르키고 여기서 쓰임은 어떤 뜻입니까?
"revizes"님 답글 감사합니다.
근데 부탁있습니다.
방금 저도 man페이지를 뒤져서execv들을 확인 해 본 결과 여기 함수들도 메인에서 주어진 것들을 쓰거나 사용자가 파싱한 값을 쓰는 것 같은데 제가 잘못 이해 했을 수도 있느니 확인해 주실 수 있겠습니까?
사실 c의 main은 제일 처음에 불려지는 function은 아닙니다
사실 c의 main은 제일 처음에 불려지는 function은 아닙니다
CRT(c runtime library)에서 먼저 main이 뜰수있게
argc, **argv에 값을 넣어주고 여러가지 셋팅을 합니다.
그 부분이 다 유저스페이스에서 이뤄지죠.
exec*계열 함수들은 그냥 쉘에서 실행한거랑 비슷합니다.
따라서 실행 파일에서 crt가 실행되고 main이 실행되겠죠
crt로 찾으시면 원하는거 보실수 있으실겁니다
좋은 글 두개가 있어서 첨부합니다.http://www.joinc.
좋은 글 두개가 있어서 첨부합니다.
http://www.joinc.co.kr/modules.php?op=modload&name=Forum&file=viewtopic&topic=28855&forum=1&2
http://www.linuxgazette.com/issue84/hawk.html
windows에서 visual c++도 마찬가지입니다.
"morris"님 답글 감사합니다.
제 글에 답글 해 주신 모든 분께 감사합니다.
특히, "morris"님 글에 감사 합니다.
제가 ㅤㅊㅏㅊ아 본 결과를 말씀드리면 일단 "morris"님의 글이 맞는 것 같습니다. 리눅스 커널 2.6.11.10 버전에서 lib 디렉토리의 "cmdline.c" 소스가 있는데 거기서 일단 라인 명령들을 처리하는 것 같습니다.
혹시 잘못 이해했을 수도 있으니 의견 부탁드립니다.
[quote="morris"]사실 c의 main은 제일 처음에 불려지는
책에서 찾아보니 이 그림이 있는데..모리스님이 말씀하신
내용하고 약간 차이가 있는것 같은데..
잘 모르겠습니다. ^^[img][/img]
다 덤벼! 다 받아줄께!!
댓글 달기