atexit - legt eine Funktion fest, die beim normalen Programmende aufgerufen wird
Standard-C-Bibliothek (
libc,
-lc)
#include <stdlib.h>
int atexit(void (*Funktion)(void));
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
zurückkehrt. Funktionen, die so festgelegt sind, werden in umgekehrter
Reihenfolge ihrer Registrierung aufgerufen; es werden keine Argumente
übergeben.
Die gleiche Funktion kann mehrfach registriert werden: sie wird einmal
für jede Registrierung aufgerufen.
POSIX.1 verlangt, dass eine Implementierung mindestens
ATEXIT_MAX (32)
solcher Funktionen registrieren kann. Die tatsächlich durch eine
Implementierung unterstützte Grenze können 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.
Die Funktion
atexit() gibt bei Erfolg 0 zurück; anderenfalls wird
ein von Null verschiedener Wert zurückgegeben.
Siehe
attributes(7) für eine Erläuterung der in diesem
Abschnitt verwandten Ausdrücke.
Schnittstelle |
Attribut |
Wert |
atexit() |
Multithread-Fähigkeit |
MT-Safe |
POSIX.1-2001, POSIX.1-2008, C99, SVr4, 4.3BSD.
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) durchzuführenden Schritte zur Beendigung des Prozesses
werden nicht durchgeführt.
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 führen. Portable Programme sollten
exit(3)
nicht innerhalb einer von
atexit() registrierten Funktion aufrufen.
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
registrierten Funktionen mittels
longjmp(3) beendet wird.
Seit Glibc 2.2.3 können
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.
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
void
bye(void)
{
printf("Das war alles, 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,
"Funktion für Programmschluss kann nicht gesetzt werden\n");
exit(EXIT_FAILURE);
}
exit(EXIT_SUCCESS);
}
_exit(2),
dlopen(3),
exit(3),
on_exit(3)
Die deutsche Übersetzung dieser Handbuchseite wurde von Patrick Rother
<
[email protected]> und Martin Eberhard Schauer
<
[email protected]> erstellt.
Diese Übersetzung ist Freie Dokumentation; lesen Sie die
GNU
General Public License Version 3 oder neuer bezüglich der
Copyright-Bedingungen. Es wird KEINE HAFTUNG übernommen.
Wenn Sie Fehler in der Übersetzung dieser Handbuchseite finden, schicken
Sie bitte eine E-Mail an die
Mailingliste
der Übersetzer