Я пытаюсь реализовать ||
, &&
, а также ;
операторы в оболочке 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;
Решение было посмотреть на число, которое status
возвращается. Знак скажет вам, был ли он успешным или нет.
Других решений пока нет …