리눅스 쉘에서...
글쓴이: goomi / 작성시간: 수, 2009/11/18 - 9:56오후
쉘 구현 하는데요
fork()를 해서 자식 프로세스에서
exec()을 쓰려고 하는데
명령어를 예를 들어 argv[0] = "ls" argv[1] = "-al" 입력을 받으면
if(fork()==0){
execvp(argv,argv[0],argv[1],NULL);
}
wait(exit_status);
이런식으로 쉘 에서 명령어를 구현 할 필요 없이 exec()을 이용해서 ls를 실행할 수 있어야 하는데
막상 실행을 하면 세그멘테이션 오류가 뜨네요...
뭐때문일까요 ㅠㅠ
Forums:
exec 계열은 종류가
exec 계열은 종류가 많고, 소위 인자를 좀 탑니다.
정답을 가르쳐 드리면 재미가 없으니...
다양한 인자를 두고 테스트 해 보세요.
berise@nowhere.comes.out
berise@nowhere.comes.out
헐퀴 정답을 원해요.. ㅠㅠ
execvp(*argv,argv);
이렇게도 해보고 암튼 여러가지 해봤는데 ㅠㅠ
함수 원형을 봐도 정말 답을 모르겟네요 ㅠ
exec...
일단 prototype에 맞게 쓰셔야 합니다.
execlp(argv[0],argv[1],NULL);
타입에 맞게 썻는데요
execlp(argv[0],argv[1],NULL); 이렇게 설정을 하고
프로그램을 돌렸는데도 세그멘테이션 오류가 뜨네요.. ㅠㅠ
혹시 argv[0]에
혹시 argv[0]에 전체경로명을 적어야되는 건 아닌지...
http://sebul.sarang.net/
세벌 https://sebuls.blogspot.kr/
음..
segfault 가 누구에게서, 어디 루틴에서 떨어지는지 코멘트가 없으시네요.
core dump 해서 gdp 로 찍어 보세요.
http://wiki.linuxquestions.org/wiki/Ulimit
http://bloggerdigest.blogspot.com/2006/09/gnu-gdb-core-dump-debugging.html
http://linux.about.com/library/cmd/blcmdl1_strip.htm
wait() 에서는 argument 로 int * 를 받는데..
혹시 exit_status 를 int * 로 선언하고 쓰시는 건지..?
alloc 안 되어 있다면 죽을것 같네요..
그냥 int 로 선언하시고 &exit_status 로 call 하시는게 좋을것 같군요.
되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』
되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』
wait은 int 구요 wait(&status) 라고 썻네여
중요한건 쉘에서 명령어를 입력 받으면 strtok으로 제가 정의한 char *argv[];에 저장을 하구요
외부명령어일 경우 실행 하려면 exec을 이용할 수 있는데
예를 들어 명령어 입력이 ls -al 이면 argv[0]에는 "ls"가 argv[1]에는 "-al" 이 입력 되는데
이걸 fork를 해서
if(fork()==0){
execvp(*argv,argv);
}
wait(&status);
이게 기본적인데 세그멘테이션 오류가 뜨는 걸로 보아 exec 문을 잘못 사용 한 건데요... 도대체 왜 오류가 뜨는지 모르겟네요 ㅠㅠ
댓글 달기