2016-10-13 7 views
-4

forkexecvp을 사용하여 간단한 셸을 만들었습니다. 프로그램을 실행하고 ls 또는 ls -l과 같은 명령을 입력하면 어떻게 작동하는지 알 수 있습니다. 그 일이 끝나면 내 프로그램이 다른 명령을 기다리는 동안 앉아 있지만 다른 유효한 명령을 넣거나 심지어 같은 명령을 넣을 때도 있습니다. execvpls: cannot access 'ls': no such file or directory입니다. 왜 이런 일이 일어나는지 모르겠습니다. 나는 프로그램을 다시 실행하는 데 동일한 결과를 얻는다. 내 코드는 다음과 같습니다. 나는 그것의 사진을 찍었 그래서 난 내 가상 머신을 통해 복사 할 수 없습니다. (누군가가 좋지 않을까이에 형식화하는 편집하려는 경우. 내가 도움보고 시도)Execvp 첫 번째 명령 만 올바르게 실행합니다.

http://imgur.com/a/6ZhKP

+1

도움이 될 수있는 몇 가지 코드가 필요합니다. [Minimal, Complete, Verifiable example] (http://stackoverflow.com/help/mcve) – Riley

+0

@Riley 태그를 입력하는 동안 입력 한 것을 죄송합니다. 이미지가 올바르게 튀어 나오지 못해 imgur 링크를 사용해야했습니다. 코드가 VM을 통해 복사되지 않기 때문입니다. – DrakeJacks

+2

텍스트 이미지를 게시하지 마십시오! – Olaf

답변

1

코드에서 문제는 명령 실행 사이에 인수 카운터를 0으로 다시 설정하지 않는다는 것입니다.

int tokenIndex=0; 
do { 

당신은 따라서 ls 메시지의 인수로 ls을 통과 작동 처음,하지만 두 번째

int tokenIndex; 
do { 
    tokenIndex=0; 

해야

은 (는거야 쉘에 ls ls을 입력 해보십시오 똑같은 메시지를 받으십시오).