Provided by: manpages-de-dev_0.10-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-2001  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
       seiner Eltern. 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.

KONFORM ZU

       SVr4, 4.3BSD, C89, C99, POSIX.1-2001.

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-2001  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-2001  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), exit(3), on_exit(3)

KOLOPHON

       Diese Seite  ist  Teil  der  Veröffentlichung  3.32  des  Projekts  Linux-man-pages.  Eine
       Beschreibung  des  Projekts  und  Informationen, wie Fehler gemeldet werden können, finden
       sich unter http://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>.