Fonctions de sortie en C

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

Comment puis-je décider lequel utiliser?

Sur bash,

homme 2 sortie

m’a donné la page _EXIT (2), alors que

homme 3 sortie

a donné la page EXIT (3).

exit() terminant après le nettoyage.

_exit() termine immédiatement après l’appel.

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

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

exit() – Exécute toutes les procédures de résiliation de la bibliothèque C, met fin au processus et quitte avec le code d’état fourni.

_exit() – Exécute des procédures de _exit() rapide de la bibliothèque C, met fin au processus et se ferme avec le code d’état fourni.

_cexit() – Exécute toutes les procédures de résiliation de la bibliothèque C et retourne à l’appelant, mais ne termine pas le processus.

_c_exit() – Exécute des procédures rapides de résiliation de la bibliothèque C et retourne à l’appelant, mais ne termine pas le processus.

Normative en C99 sont exit et _Exit .

La différence entre les deux est que exit exécute également les gestionnaires pouvant être enregistrés avec atexit et ferme les stream, etc.

_exit provient de POSIX et a des propriétés similaires à celles de _Exit à la différence qu’il est garanti de fermer correctement les stream.

En résumé, chaque fois que vous le pouvez, vous devez utiliser exit , c’est le moyen le plus propre de terminer.

De l’homme:

sortie:
Toutes les fonctions enregistrées avec atexit (3) et on_exit (3) sont appelées, dans l’ordre inverse de leur enregistrement … Tous les stream stdio (3) ouverts sont vidés et fermés. Les fichiers créés par tmpfile (3) sont supprimés.

_sortie:
La fonction _exit () ressemble à exit (3), mais n’appelle aucune fonction enregistrée avec atexit (3) ou on_exit (3). Le fait de vider les tampons d’E / S standard et de supprimer les fichiers temporaires créés avec tmpfile (3) dépend de la mise en œuvre. D’autre part, _exit () ferme les descripteurs de fichiers ouverts …

1.exit (): il s’agit de nettoyer le travail, par exemple en fermant le descripteur de fichier, le stream de fichiers, etc. 2._exit (): ce n’est pas nettoyer le travail en fermant le descripteur de fichier, le stream de fichiers, etc.

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

suis-je rectifié ta réponse