execvp / fork - wie erkenne ich erfolglose Ausführungen?

Im Moment schreibe ich ein C-Programm, das einen untergeordneten Prozess ausführen muss. Ich mache nicht mehrere untergeordnete Prozesse gleichzeitig oder so, das ist also ziemlich einfach. Ich führe die eingebauten Shell-Programme (d. H. Dinge wie cat und echo) definitiv erfolgreich aus, aber ich muss auch feststellen können, wann eines dieser Programme nicht erfolgreich ausgeführt werden kann. Ich versuche dies mit dem folgenden vereinfachten Code:

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.
   }
}

Wenn ich zum Beispiel versuche, rm fileThatDoesntExist.txt auszuführen, würde ich gerne in Betracht ziehen, dass ein Fehler vorliegt, da die Datei nicht existiert. Wie kann ich das erreichen? Während dieser Aufruf von execvp () integrierte Shell-Programme erfolgreich ausführt, führt er auch keine Programme im aktuellen Verzeichnis der ausführbaren Datei aus (d. H. Das Programm, in dem dieser Code ausgeführt wird). Muss ich noch etwas tun, damit Programme im aktuellen Verzeichnis ausgeführt werden?

Vielen Dank!

Antworten auf die Frage(3)

Ihre Antwort auf die Frage