Wenn das Argument an die Funktion der Funktionsfamilie (z. B. `execl`,` execv`, `execvp`) in Linux nicht ausführbar ist, wird der" Exec` -Anruf "fehlschlagen. Der Prozess wird * nicht * wechseln, um die angegebene Datei auszuführen.
Speziell:
* `errno` wird festgelegt: Die globale Variable "Errno" wird so eingestellt, dass der Fehler angezeigt wird. Der wahrscheinlichste Wert ist "Enoexec` Andere Fehler sind abhängig von den spezifischen Umständen möglich (wie die nicht gefundene Datei, "Enoent").
* Der ursprüngliche Prozess wird fortgesetzt: Der ursprüngliche Prozess wird * weiter laufen. Der "Exec` -Anruf" wird -1 zurückgegeben, und das Programm wird die Ausführung ab dem Punkt nach dem fehlgeschlagenen "Exec` -Anruf" fortsetzen. Das ist entscheidend; Es beendet den Prozess nicht. Ihr Code sollte den Rückgabewert von `exec` überprüft, um diesen Fehler anmutig zu behandeln. Das einfache Ignorieren des Rückkehrwerts kann zu subtilen und schwer zu enttäuschenden Fehler führen.
Beispiel (c):
`` `c
#include
#include
#include
#include
int main () {
int ret =execl ("./ nicht existent_program", "nicht existent_program", null);
if (ret ==-1) {
fprintf (stderr, "execl fehlgeschlagen:%s \ n", Strerror (errno));
Rückkehr 1; // einen Fehler angeben
}
// Diese Zeile wird nur dann erreicht, wenn EXECL erfolgreich ist (was sie in diesem Beispiel nicht nicht erreicht hat)
printf ("Dies sollte nicht gedruckt werden. \ n");
Rückkehr 0;
}
`` `
Dieser Code versucht, ein nicht existierendes Programm auszuführen. Der "execl` call wird fehlschlagen," errno "wird festgelegt (wahrscheinlich" Enoent ")," Strerror (Errno) "wird eine menschliche lesbare Fehlermeldung angeben, und das Programm druckt den Fehler und beendet mit einem Status ungleich Null. Wenn die Datei vorhanden wäre, aber die Erlaubnis ausführte, wäre "Errno" wahrscheinlich "eacces".
Kurz gesagt, ein fehlgeschlagener "Exec`-Anruf aufgrund einer nicht auszugehörigen Datei ist ein Laufzeitfehler, der in Ihrem Programm explizit behandelt werden muss, um unerwartetes Verhalten zu verhindern. Überprüfen Sie immer den Rückgabewert von `exec` und behandeln Sie Fehler angemessen.