2013-07-11 2 views
0

구문 분석하는 명령을 실행해야하는 작은 셸을 코딩하고 있습니다.execvp 및 wait() 후에 제어를 다시 얻을 수 없습니다.

f는 다음과 같이 char **입니다. [ls] [- la] p는 다음과 같이 사용됩니다. [wc] 그래서 ws에서 ls -la를 파이프 처리했습니다. 내 문제는 "ls -la | wc & & 날짜"를 실행하면 파이프에 대해 잘 작동하며 내 미니 쉘은 닫히고 "날짜"는 실행되지 않습니다. 나는 그것이 끝나기를 기다리기 위해 대기 함수를 사용했지만 아무 것도하지 않습니다. 두 번째 execvp 직후에 멈추고 종료되는 것처럼 보입니다.

내 배열은 NULL로 끝납니다. ls -la | wc는 잘 실행되었지만이 후에 bash로 돌아온다. execlp 및 execl 함께 시도한 있지만이 내 첫 번째 인수 (ls + -la) 옵션이 필요하다고 고려 probleme 아니라고 생각합니다. 제발 도와 주실 수 있습니까? 미리 감사드립니다.

답변

1

모든 형태의 exec은 절대 반환하지 않습니다. 현재 실행중인 이미지를 표시된 실행 파일로 대체합니다. 여기서 핵심 단어는 "대체"입니다.

exec*에 대한 호출 다음의 명령문이 실행되는 유일한 상황은 exec이 실패한 경우 (예 : 실행 파일을 찾을 수없는 경우)입니다.

+0

감사합니다. 이해합니다. 내가 왜 내 껍질로 돌아 가지 않는지 알 겠어?하지만 내 파이프 뒤에 배시로 돌아 왔어? – user2145240

+0

@ user2145240 : 실행()이 반환되지 않으므로 셸로 돌아 가지 않습니다. 쉘이'ls'로 대체되었으므로'ls'가 종료되면 bash로 되돌아갑니다. – rici

+0

Hmmm 볼 수는 있지만 쉘로 되돌릴 수있는 방법을 모르겠다 ... – user2145240