ein Kapitel zurück                                           ein Kapitel weiter

Zuerst der Syntax zu atexit...

#include <stdlib.h>
int atexit(void (*funktion) (void));

Mit atexit richten wir einen sogenannten Funktionshandler ein. Das heißt das alle Funktionen die wir in atexit angeben in einer Funktionsliste eingetragen werden und bei Beendigung des Programms in umgekehrter Reihenfolge ausgeführt werden. Also nach dem LIFO-Prinzip (last in first out). Laut ANSI-C können insgesamt 32 solcher Funktionen verwendet werden.

Hierzu nun ein Beispiel....

/*Download:atexit1.c*/
#include <stdio.h> #include <stdlib.h> void funktion1() { printf("Die Funktion funktion1 wurde aufgerufen\n"); } void funktion2() { printf("Die Funktion funktion2 wurde aufgerufen\n"); } int main() { printf("Wir beenden unser Programm\n"); atexit(funktion1); atexit(funktion2); return 0; }

Solch ein Beispiel macht natürlich wenig Sinn. Sie könnten atexit zum Beispiel verwenden um Log-Dateien zu schreiben. Beispielsweise wenn der User das Programm beendet, oder wenn das Programm mit einem Fehler beendet, in diese Log-Datei einen Zeitstempel schreiben. Oder noch diverse Aufräumarbeiten durchführen.........

/*Download:atexit2.c*/
#include <stdio.h> #include <stdlib.h> char *memPtr; void free_malloc( ) { /*Wurde überhaupt speicher reserviert?*/ if(memPtr == NULL) printf("Kein Speicher war reserviert!!!\n"); else { free(memPtr); printf("Speicher wurde freigegeben!!\n"); } } int main() { memPtr = malloc(1000); if(memPtr==NULL) fprintf(stderr, "Konnte keinen Speicher reservieren\n"); if( atexit (free_malloc) != 0) fprintf(stderr, "Konnte Funktionshandler nicht einrichten\n"); /*Nach vielen Zeilen Code beenden wir das Programm*/ return 0; }

ein Kapitel zurück          nach oben           ein Kapitel weiter


© 2001,2002 Jürgen Wolf