Im Moment schreibe ich ein C-Programm, das einen Kindprozess ausführen muss. Ich mache nicht mehrere Kindprozesse gleichzeitig oder irgendetwas, also ist das ziemlich einfach. Ich führe die eingebauten Shell-Programme (d. H. Dinge wie cat und echo) erfolgreich aus, aber ich muss auch in der Lage sein zu erkennen, wenn eines dieser Programme nicht erfolgreich ausgeführt werden kann. Ich versuche, dies mit dem folgenden vereinfachten Code:execvp/fork - Wie erhalte ich erfolglose Ausführungen?
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.
}
}
So zum Beispiel, wenn ich versuche, rm fileThatDoesntExist.txt auszuführen, würde Ich mag zu bedenken, dass ein Fehler, da die Datei nicht existierte. 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 läuft); Muss ich noch etwas anderes tun, um Programme im aktuellen Verzeichnis ausführen zu lassen?
Danke!
Mögliches Duplikat von [Wie behebt man execvp (...) Fehler nach fork()?] (Https: // stackoverflow.com/questions/1584956/how-to-handle-execvp-Fehler-nach-fork) – Ruslan