1
저는 bash 쉘에서 ||
, &&
및 ;
연산자를 구현하려고합니다. 내가 뭘 하려는지, int
플래그가 성공한 경우 1로, 그렇지 않은 경우 0으로 설정됩니다. 내 문제는 내가 1로 플래그를 설정하는 등 ls -apples
으로 잘못된 동작을 입력 할 경우에도 나는 또한 오류 메시지가 있다는 것입니다C++에서 쉘용 bash 연산자 구현
LS : 잘못된 옵션 - 'E' '에게 LS --help'을 시도 더 많은 정보를 원한다면
내가 기술적으로 그것을 실행하고있는 것을 의미한다라고 생각한다? execvp
이 잘못된 조작을 수행했는지 여부를 어떻게 추적합니까?
pid_t pid;
pid_t waitId;
int status;
//forks into two processes
pid = fork();
//There was an error during fork
if (pid < 0)
{
successFlag = 0;
perror("There was an error");
}
else if (pid == 0)
{
//must be cast because our function expects a char *const argv[]
if (execvp(command[0], (char**)command) < 0)
{
//error at execvp
successFlag = 0;
perror("There was an error executing the process");
}
exit(EXIT_FAILURE);
}
else
{
do
{
waitId = waitpid(pid, &status, WUNTRACED | WCONTINUED);
if(waitId == -1){
successFlag = 0;
perror("Error in parent process");
exit(EXIT_FAILURE);
}
}
while (!WIFEXITED(status) && !WIFSIGNALED(status));
}
//use this flag to determine whether the process was a success
successFlag = 1;
맞습니다. ls 명령이 실행되었습니다. 문제점 진술을 올바르게 이해하면 명령이 실패를 전송했는지 확인해야합니다. 어떤 경우에는 명령에 의해 반환 된 "오류 코드"(종료 코드)가 필요합니다. –
내가 한 것은'waitpid'의'status' 값을 보았습니다. 나는 0이 아닌 어떤 값도 유효하지 않음을 발견했다. 이것을 처리하기 위해 부울 플래그를 만들었습니다. 이게 유효합니까? – ecain