16.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 daraufhin testen, ob das EOF-Flag 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. Statt
while( (c=getc(stdin)) != EOF)
wurde Folgendes geschrieben:
while(c = getc(stdin)) if(feof(stdin) != 0)
Anstatt 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.
Hinweis |
Das EOF-Flag (bzw. WEOF bei den entsprechenden Funktionen von breiten Zeichen) wird von einer Lesefunktion gesetzt, wenn das Dateiende erreicht wird. Der Rückgabewert EOF (bzw. WEOF) kann aber auch bei einem aufgetretenen Fehler zurückgegeben werden. Um diese beiden Fälle zu unterscheiden, müssen Sie entweder die Funktion feof() oder ferror() aufrufen. |
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 zu:
quelle=fopen(argv[1], "r"); if(ferror(quelle))
Auch bei ferror() muss bei nochmaliger Verwendung die Funktion clearerr() verwendet werden, um das 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.
Ihre Meinung
Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.