2010-09-07 20 views
8

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).

risposta

7

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.

+1

OK, ma qual è la differenza tra terminazione completa e rapida? – adf88

+1

si prega di elaborare quello che dovrebbe essere usato quando. –

+4

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

1

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 ...

0

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

+0

_exit chiude i descrittori di file. – adf88

+0

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. –

7

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.