Scroll to navigation

ATEXIT(3) Linux-Programmierhandbuch ATEXIT(3)

BEZEICHNUNG

atexit - legt eine Funktion fest, die beim normalen Programmende aufgerufen wird

ÜBERSICHT

#include <stdlib.h>
int atexit(void (*function)(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 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 Kind-Prozess erzeugt wird, erbt er Kopien der Registrierungen seines Elternprozesses. Nach einem erfolgreichen Aufruf einer der exec(3)-Funktionen werden alle Registrierungen entfernt.

RÜCKGABEWERT

Die Funktion atexit() gibt bei Erfolg 0 zurück; anderenfalls wird ein von Null verschiedener Wert zurückgegeben.

ATTRIBUTE

Siehe attributes(7) für eine Erläuterung der in diesem Abschnitt verwandten Ausdrücke.
Schnittstelle Attribut Wert
atexit() Multithread-Fähigkeit MT-Safe

KONFORM ZU

POSIX.1-2001, POSIX.1-2008, 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) 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 atexit(3) registrierten Funktionen mittels longjmp(3) beendet wird.

Linux-Anmerkungen

Seit glibc 2.2.3 können atexit() (und on_exit(3)) zur Erzeugung von Funktionen einer Laufzeitbibliothek verwendet werden, die aufgerufen werden, wenn die Bibliothek aus dem Speicher entfernt wird.

BEISPIEL

#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);
}

SIEHE AUCH

_exit(2), dlopen(3), exit(3), on_exit(3)

KOLOPHON

Diese Seite ist Teil der Veröffentlichung 4.16 des Projekts Linux-man-pages. Eine Beschreibung des Projekts, Informationen, wie Fehler gemeldet werden können sowie die aktuelle Version dieser Seite finden sich unter https://www.kernel.org/doc/man-pages/.

ÜBERSETZUNG

Die deutsche Übersetzung dieser Handbuchseite wurde von Patrick Rother <krd@gulu.net> und Martin Eberhard Schauer <Martin.E.Schauer@gmx.de> 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 <debian-l10n-german@lists.debian.org>.

15. September 2017 Linux