Home Hardware Networking Programmazione Software Domanda Sistemi
Conoscenza del computer >> sistemi >> Unix >> .

Cosa succede se l'argomento a Exec non è eseguibile usando Linux?

Se l'argomento alla famiglia di funzioni `Exec` (ad esempio,` Execl`, `Execv`,` Execvp`) in Linux non è eseguibile, la chiamata `Exec` fallirà. Il processo * non * passerà all'esecuzione del file specificato.

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.

 

sistemi © www.354353.com