18.11 Fehlerbehandlung von Streams – feof, ferror und clearerr
 
In diesem Abschnitt folgen einige Funktionen, die nicht so häufig verwendet werden, aber durchaus von Bedeutung sind. Denn gerade die Fehlerbehandlung wird bei Programmen oft vernachlässigt.
Zuerst die Syntax zu feof():
#include <stdio.h>
int feof(FILE *datei);
Mit dieser Funktion können Sie einen Stream auf das EOF-Flag testen, ob es gesetzt ist oder nicht. Hierzu ein Beispiel:
/* feof.c */
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int c;
while(c = getc(stdin))
if(feof(stdin) != 0)
break;
else
putc(c,stdout);
return EXIT_SUCCESS;
}
Das Programm dürfte Ihnen noch vom Abschnitt zuvor bekannt sein. Anstatt
while( (c=getc(stdin)) != EOF)
wurde Folgendes geschrieben
while(c = getc(stdin))
if(feof(stdin) != 0)
Statt zu testen, ob der Wert der Variablen c demjenigen von EOF entspricht, wurde mit feof() geprüft, ob das EOF-Flag gesetzt ist. Falls nicht, gibt die Funktion 0 zurück, falls aber EOF gesetzt ist, gibt die Funktion ungleich 0 zurück. Wird die Funktion feof() bei längeren Programmen nochmals benötigt, muss vorher mit
clearerr(stdin);
das EOF-Flag des entsprechenden Streams wieder auf 0 gesetzt werden. Natürlich können Sie anstatt des Streams stdin auch jeden anderen offenen Stream verwenden.
Die Syntax von ferror() lautet:
#include <stdio.h>
int ferror(FILE *datei);
Die Funktion ferror() ist ähnlich wie feof(), nur dass die Datei auf das Fehler-Flag überprüft wird. Auch hier ist im Prinzip der Aufruf
if((quelle=fopen(argv[1],"r")) == NULL)
gleichwertig mit
quelle=fopen(argv[1], "r");
if(ferror(quelle))
Auch bei ferror() muss bei nochmaliger Verwendung die Funktion clearerr() verwendet werden, um den Fehler-Flag zurückzusetzen. Die Syntax von clearerr() lautet:
#include <stdio.h>
void clearerr(FILE *datei);
clearerr() dient zum Zurücksetzen des EOF- und des Fehler-Flags bei Streams.
|