Реализация операторов bash для оболочки в переполнении стека

Я пытаюсь реализовать ||, &&, а также ; операторы в оболочке bash я делаю. То, что я пытаюсь сделать, это использовать int как флаг, который будет установлен в 1, если он был успешным, или в 0, если это не так. Моя проблема в том, что даже если я введу недопустимую операцию, такую ​​как ls -apples он устанавливает флаг в 1. Я также получаю сообщение об ошибке

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;

0

Решение

Решение было посмотреть на число, которое status возвращается. Знак скажет вам, был ли он успешным или нет.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector