Was ist der Unterschied zwischen exit () , _exit () und _Exit () in C?
Wie entscheide ich, welches ich verwenden soll?
Auf Bash,
man 2 beenden
gab mir die Seite _EXIT (2), während
mann 3 beenden
gab die Seite EXIT (3).
exit()
wird nach der Bereinigung beendet.
_exit()
wird sofort nach dem Aufruf beendet.
Wenn Sie einen Stack beschädigt haben, während exit()
function aufgerufen wurde, kann das Programm mit Segmentierungsfehler schließen, wenn Sie _exit()
verwenden, beenden Sie das Programm im Schnellmodus.
Von Ссылка haben Sie
exit()
- Führt vollständige C-Bibliothek-Beendigungsvorgänge aus, beendet den Prozess und wird mit dem angegebenen Statuscode beendet.
_exit()
- Führt schnelle C-Bibliothek-Beendigungsvorgänge aus, beendet den Prozess und wird mit dem bereitgestellten Statuscode beendet.
_cexit()
- Führt vollständige C-Bibliothek-Beendigungsvorgänge aus und kehrt zum Aufrufer zurück, beendet den Prozess jedoch nicht.
_c_exit()
- Führt schnelle C-Bibliothek-Beendigungsvorgänge aus und kehrt zum Aufrufer zurück, beendet den Prozess jedoch nicht.
Normativ in C99 sind exit
und _Exit
.
Der Unterschied zwischen den beiden ist, dass exit
auch die Handler ausführt, die mit atexit
registriert sind und Streams etc. schließt, während _Exit
die atexit
Routinen nicht aufruft und Streams möglicherweise nicht richtig schließt .
_exit
stammt von POSIX und hat ähnliche Eigenschaften wie _Exit
mit dem Unterschied, dass Streams korrekt geschlossen werden.
Kurz gesagt, wann immer Sie können, sollten Sie exit
verwenden, dies ist der sauberste Weg zum Beenden.
Vom Menschen:
exit:
Alle Funktionen, die bei atexit (3) und on_exit (3) registriert sind, werden aufgerufen, in die umgekehrte Reihenfolge ihrer Registrierung ... Alle offenen stdio (3) streams werden gespült und geschlossen. Dateien, die von tmpfile (3) erstellt wurden, werden entfernt._exit:
Die Funktion _exit () ist wie exit (3), ruft aber keine Funktionen auf registriert bei atexit (3) oder on_exit (3). Ob es Standard ist I / O puffert und entfernt temporäre Dateien, die mit tmpfile (3) erstellt wurden implementierungsabhängig. Auf der anderen Seite schließt _exit () offen Dateideskriptoren ...
1.exit (): Es ist die Arbeit wie das Schließen von Dateideskriptor, Dateistrom und so weiter zu bereinigen, 2._exit (): Es ist nicht die Arbeit zu bereinigen, wie den Dateideskriptor, den Dateistrom usw. zu schließen
Dies sind die Hauptunterschiede zwischen exit () und _exit ().
bin ich Ihre Antwort behoben