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