atexit(3) Library Functions Manual atexit(3) BEZEICHNUNG atexit - legt eine Funktion fest, die beim normalen Programmende aufgerufen wird BIBLIOTHEK Standard-C-Bibliothek (libc, -lc) UBERSICHT #include int atexit(void (*Funktion)(void)); BESCHREIBUNG Die Funktion atexit() legt fest, dass die angegebene Funktion bei normalem Programmende aufgerufen wird, also wenn entweder exit(3) aufgerufen wird oder das Programm aus seiner main-Funktion zuruckkehrt. Funktionen, die so festgelegt sind, werden in umgekehrter Reihenfolge ihrer Registrierung aufgerufen; es werden keine Argumente ubergeben. Die gleiche Funktion kann mehrfach registriert werden: sie wird einmal fur jede Registrierung aufgerufen. POSIX.1 verlangt, dass eine Implementierung mindestens ATEXIT_MAX (32) solcher Funktionen registrieren kann. Die tatsachlich durch eine Implementierung unterstutzte Grenze konnen Sie mit sysconf(3) ermitteln. Wenn mittels fork(2) ein Kindprozess erstellt wird, erbt er Kopien der Registrierungen seines Elternprozesses. Nach einem erfolgreichen Aufruf einer der exec(3)-Funktionen werden alle Registrierungen entfernt. RUCKGABEWERT Die Funktion atexit() gibt bei Erfolg 0 zuruck; anderenfalls wird ein von Null verschiedener Wert zuruckgegeben. ATTRIBUTE Siehe attributes(7) fur eine Erlauterung der in diesem Abschnitt verwandten Ausdrucke. +--------------------------------+-------------------------+-----------+ |Schnittstelle | Attribut | Wert | +--------------------------------+-------------------------+-----------+ |atexit() | Multithread-Fahigkeit | MT-Sicher | +--------------------------------+-------------------------+-----------+ VERSIONEN POSIX.1 legt das Verhalten bei mehrmaligem Aufruf von exit(3) (d.h. der Aufruf von exit(3) innerhalb einer mit atexit() registrierten Funktion) nicht fest. Auf manchen Systemen (aber nicht Linux) kann dies zu einer Endlosschleife fuhren. Portable Programme sollten exit(3) nicht innerhalb einer von atexit() registrierten Funktion aufrufen. STANDARDS C11, POSIX.1-2008. GESCHICHTE POSIX.1-2001, C89, C99, SVr4, 4.3BSD. ANMERKUNGEN Unter Verwendung von atexit() (und on_exit(3)) registrierte Funktionen werden nicht aufgerufen, wenn die Prozesse wegen eines Signals nicht normal beendet werden. Wenn eine der registrierten Funktionen _exit(2) aufruft, dann werden jedwede noch verbleibende Funktionen nicht aufgerufen und die anderen von exit(3) durchzufuhrenden Schritte zur Beendigung des Prozesses werden nicht durchgefuhrt. Die Funktionen atexit() und on_exit(3) registrieren Funktionen in der gleichen Liste. Wird ein Prozess normal beendet werden die registrierten Funktionen in der umgekehrten Reihenfolge ihrer Registrierung durch diese beiden Funktion aufgerufen (also die zuletzt registrierte Funktion zuerst). POSIX.1 legt das Verhalten nicht fest, wenn eine der mit atexit(3) registrierten Funktionen mittels longjmp(3) beendet wird. Linux-Anmerkungen Seit Glibc 2.2.3 konnen atexit() (und on_exit(3)) zur Erzeugung von Funktionen einer dynamische Bibliothek verwendet werden, die aufgerufen werden, wenn die Bibliothek aus dem Speicher entfernt wird. BEISPIELE #include #include #include void bye(void) { printf("Das wars, Leute\n"); } int main(void) { long a; int i; a = sysconf(_SC_ATEXIT_MAX); printf("ATEXIT_MAX = %ld\n", a); i = atexit(bye); if (i != 0) { fprintf(stderr, "Exit-Funktion kann nicht gesetzt werden\n"); exit(EXIT_FAILURE); } exit(EXIT_SUCCESS); } SIEHE AUCH _exit(2), dlopen(3), exit(3), on_exit(3) UBERSETZUNG Die deutsche Ubersetzung dieser Handbuchseite wurde von Patrick Rother , Martin Eberhard Schauer und Helge Kreutzmann erstellt. Diese Ubersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 oder neuer bezuglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG ubernommen. Wenn Sie Fehler in der Ubersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an die Mailingliste der Ubersetzer . Linux man-pages 6.06 31. Oktober 2023 atexit(3)