execvp / fork - como pegar execuções malsucedidas?

No momento, estou escrevendo um programa em C que deve executar um processo filho. Eu não estou fazendo vários processos filho simultaneamente ou qualquer coisa, então isso é bastante simples. Eu definitivamente estou executando os programas de shell internos (ou seja, coisas como cat e echo) com sucesso, mas também preciso ser capaz de dizer quando um desses programas não consegue executar com sucesso. Estou tentando isso com o seguinte código simplificado:

int returnStatus; // The return status of the child process.
pid_t pid = fork();

if (pid == -1) // error with forking.
{
   // Not really important for this question.
}
else if (pid == 0) // We're in the child process.
{
   execvp(programName, programNameAndCommandsArray); // vars declared above fork().

   // If this code executes the execution has failed.
   exit(127); // This exit code was taken from a exec tutorial -- why 127?
}
else // We're in the parent process.
{
   wait(&returnStatus); // Wait for the child process to exit.

   if (returnStatus == -1) // The child process execution failed.
   {
      // Log an error of execution.
   }
}

Então, por exemplo, se eu tentar executar rm fileThatDoesntExist.txt, eu gostaria de considerar uma falha, já que o arquivo não existia. Como posso fazer isso? Além disso, embora essa chamada execvp () execute com sucesso programas shell internos, ela não executa programas no diretório atual do executável (ou seja, o programa em que esse código está sendo executado); Existe algo mais que eu tenho que fazer para conseguir executar programas no diretório atual?

Obrigado!

questionAnswers(3)

yourAnswerToTheQuestion