In particolare:
* `Errno` verrà impostato: La variabile globale `errno verrà impostata per indicare l'errore. Il valore più probabile sarà `enoexec` (errore del formato eseguibile), il che significa che il file non è un eseguibile valido per l'architettura corrente o` eacces '(autorizzazione negata), il che significa che il processo non ha il permesso di eseguire il file (anche se è un eseguibile valido). Altri errori sono possibili a seconda delle circostanze specifiche (come il file non trovato, `enoent`).
* Il processo originale continua: Il processo originale * continuerà * in esecuzione. La chiamata `Exec` restituirà -1 e il programma continuerà l'esecuzione dal punto dopo la chiamata` Exec` non riuscita. Questo è cruciale; Non termina il processo. Il codice dovrebbe verificare il valore di ritorno di `Exec` per gestire con grazia questo errore. Basta ignorare il valore di ritorno può portare a bug sottili e difficili da debitare.
Esempio (c):
`` `c
#include
#include
#include
#include
int main () {
int ret =Execl ("./ Nonxist_Program", "nonxist_program", null);
if (ret ==-1) {
fprintf (Stderr, "Execl non riuscito:%s \ n", Strerror (errno));
Ritorno 1; // indica un errore
}
// questa riga verrà raggiunta solo se Execl ha successo (cosa che non sarà in questo esempio)
printf ("Questo non dovrebbe essere stampato. \ n");
restituzione 0;
}
`` `
Questo codice tenta di eseguire un programma inesistente. La chiamata `Execl` fallirà,` errno` verrà impostata (probabile che `enoent`),` Strerror (errno) `fornirà un messaggio di errore leggibile dall'uomo e il programma stamperà l'errore ed uscirà con uno stato diverso da zero. Se il file esistesse ma mancava di eseguire l'autorizzazione, `errno` sarebbe probabilmente` eacces '.
In breve, una chiamata `Exec` non riuscita a causa di un file non eseguibile è un errore di runtime che deve essere gestito esplicitamente all'interno del programma per prevenire comportamenti imprevisti. Controlla sempre il valore di ritorno di `Exec` e gestisci gli errori in modo appropriato.
Informazioni correlate
sistemi © www.354353.com