2010-09-07 9 views
8

Quelle est la différence entre sortie(), _exit() et _Exit() en C?fonctions de sortie en C

Comment puis-je décider lequel utiliser?

Sur bash,

homme 2 sortie

m'a donné la _Exit page (2), tandis que

homme 3 sortie

a donné la page SORTIE (3).

Répondre

7

exit() se terminant après le nettoyage.

_exit() se terminant immédiatement après l'appel.

Si vous avez une pile corrompue alors que la fonction exit() a été appelée, le programme peut se fermer avec une erreur de segmentation, si vous utilisez _exit(), quitter le programme en mode rapide.

De http://msdn.microsoft.com/en-us/library/6wdz5232.aspx vous avez

exit() - Appliquer les procédures de terminaison de bibliothèque complète de C, se termine le processus, et se termine avec le code d'état fourni.

_exit() - Exécute des procédures de terminaison de bibliothèque C rapides, termine le processus et quitte avec le code d'état fourni.

_cexit() - Effectue des procédures de terminaison de bibliothèque C complètes et renvoie à l'appelant, mais ne termine pas le processus.

_c_exit() - Exécute des procédures de terminaison de bibliothèque C rapides et renvoie à l'appelant, mais n'arrête pas le processus.

+1

OK, mais quelle est la différence entre la terminaison complète et rapide? – adf88

+1

s'il vous plaît élaborer ce qui doit être utilisé quand. –

+4

Appelez 'exit()'. Les autres sont des détails d'implémentation, et ne sont généralement pas aussi utiles en dehors de certaines conditions rares lors de la construction de frameworks. – RBerteig

1

De l'homme:

sortie:
Toutes les fonctions enregistrées avec atexit (3) et on_exit (3) sont appelés, dans l'ordre inverse de leur enregistrement ... Tous stdio ouvert (3) Filières sont rincés et fermés. Les fichiers créés par tmpfile (3) sont supprimés.

_exit:
La fonction _exit() est similaire à exit (3), mais n'appelle aucune fonction enregistrée avec atexit (3) ou on_exit (3). Si elle vide les tampons d'E/S standard et supprime les fichiers temporaires créés avec tmpfile (3), cela dépend de l'implémentation . D'autre part, _exit() ne fermer les descripteurs de fichiers ouverts ...

0

1.exit(): c'est le nettoyage du travail comme la fermeture de descripteur de fichier, flux de fichiers et ainsi de suite, 2._exit(): ce n'est pas nettoyer le travail comme la fermeture du descripteur de fichier, le flux de fichiers et ainsi de suite

Ce sont la différence majeure de exit() et _exit().

am i rectifié ur réponse

+0

_exit ferme les descripteurs de fichier. – adf88

+0

Non, le noyau le fait. _exit termine juste le processus. La caractéristique principale de _exit est qu'elle ne fait rien d'autre que dire au noyau de terminer le processus. –

7

Normative dans C99 sont exit et _Exit.

La différence entre les deux est que exit Réalise également les gestionnaires qui peuvent être enregistrés avec atexit et ferme les cours d'eau etc alors que _Exit ne remet pas les atexit routines et peuvent ou non courants ferment correctement.

_exit est de POSIX et a des propriétés similaires à _Exit à la différence qu'il est garanti de fermer les flux correctement. En résumé, chaque fois que vous le pouvez vous devriez utiliser exit, c'est la façon la plus propre de se terminer.