Qual è la differenza tra exit(), _exit() e _exit() in C?funzioni uscita in C
Come decidere quale utilizzare?
In bash,
man 2 uscita
mi ha dato pagina _exit (2), mentre
man 3 uscita
dato pagina EXIT (3).
Qual è la differenza tra exit(), _exit() e _exit() in C?funzioni uscita in C
Come decidere quale utilizzare?
In bash,
man 2 uscita
mi ha dato pagina _exit (2), mentre
man 3 uscita
dato pagina EXIT (3).
exit()
terminazione dopo la pulizia.
_exit()
termina immediatamente dopo la chiamata.
Se si dispone di una pila danneggiata mentre la funzione exit()
è stata chiamata programma potrebbe chiudersi con errore di segmentazione, se si utilizza _exit()
, l'uscita del programma in modalità rapida.
Da http://msdn.microsoft.com/en-us/library/6wdz5232.aspx voi hanno
exit()
- Esegue procedure complete di terminazione di libreria C, termina il processo, e chiude con il codice di stato fornito.
_exit()
- Esegue procedure di terminazione rapida della libreria C, termina il processo ed esce con il codice di stato fornito.
_cexit()
- Esegue le procedure complete di terminazione della libreria C e restituisce al chiamante, ma non interrompe il processo.
_c_exit()
- Esegue procedure di terminazione della libreria C rapide e restituisce al chiamante, ma non interrompe il processo.
Da uomo:
uscita:
Tutte le funzioni registrate con atexit (3) e on_exit (3) sono chiamati, in ordine inverso rispetto alla loro registrazione ... Tutti stdio aperta (3) flussi sono arrossati e chiusi. I file creati da tmpfile (3) vengono rimossi._exit:
La funzione _exit() è come exit (3), ma non chiama alcuna funzione registrata con atexit (3) o on_exit (3). Se svuota i buffer di I/O standard e rimuove i file temporanei creati con tmpfile (3) è dipendente dall'implementazione. D'altra parte, _exit() non chiude aperti descrittori di file ...
1.exit(): è pulizia il lavoro come se si chiudesse descrittore di file, flusso di file e così via, 2._exit(): non ripulisce il lavoro come chiudere il descrittore di file, il flusso di file e così via
Queste sono le principali differenze di exit() e _exit().
Am I rettificato ur risposta
_exit chiude i descrittori di file. – adf88
No, il kernel lo fa. _exit termina semplicemente il processo. La caratteristica principale di _exit è che non fa altro che dire al kernel di terminare il processo. –
normativa in C99 sono exit
e _Exit
.
La differenza tra i due è che exit
esegue anche i gestori che possono essere registrati con atexit
e chiude torrenti ecc mentre _Exit
non chiama il atexit
routine e corsi d'acqua può o non può chiudere correttamente.
_exit
proviene da POSIX e ha proprietà simili a _Exit
con la differenza che è garantito chiudere correttamente i flussi.
In sintesi, ogni volta che è possibile è necessario utilizzare exit
, questo è il modo più pulito per terminare.
OK, ma qual è la differenza tra terminazione completa e rapida? – adf88
si prega di elaborare quello che dovrebbe essere usato quando. –
Chiama 'exit()'. Gli altri sono dettagli di implementazione e generalmente non sono utili al di fuori di alcune rare condizioni quando si costruiscono strutture. – RBerteig