Provided by: manpages-de-dev_2.5-1_all bug

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.

       ┌──────────────┬───────────────────────┬─────────┐
       │SchnittstelleAttributWert    │
       ├──────────────┼───────────────────────┼─────────┤
       │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.15  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>.