14.4 Dateien schließen
Wenn Sie mit der Ausgabe in eine Datei fertig sind, sollten Sie sie mit der Funktion fclose() wieder schließen. Die Syntax dieser Funktion lautet:
#include <stdio.h>
int fclose( FILE *stream );
Nach dem Aufruf der Funktion fclose() werden noch ungeschriebene Daten in die Datei geschrieben, die sich eventuell noch in dem Ausgabepuffer befinden. Erst nach dieser Aktion befinden sich alle Daten in der Datei, die in diese hinein sollen. Wenn ein Fehler beim Schließen einer Datei aufgetreten ist, wird EOF zurückgegeben, ansonsten 0.
Beachten Sie hierbei, dass fclose() einen gültigen FILE-Zeiger erwartet. Wenn Sie einen ungültigen Zeiger oder NULL an fclose() übergeben, ist das weitere Verhalten undefiniert. Meistens geschieht einfach nichts.
Zwar wird ein Stream meistens auch nach Beendigung eines Programms geschlossen (das schließt auch eine abnormale Beendigung mit ein), aber nur mithilfe der Funktion fclose() ist wirklich sichergestellt, dass noch nicht geschriebene Daten im Ausgabepuffer in die Datei geschrieben werden.
In der Praxis ist es daher ratsam, eine Datei gleich nach dem Abschluss der Datenverarbeitung zu schließen, um so die Gefahr eines Datenverlusts im Falle eines Programmabsturzes zu reduzieren.
14.4.1 Limit maximal geöffneter Dateien
Ein weiteres wichtiges Argument, um eine Datei zu schließen ist Folgendes: Sie können keine unbegrenzte Anzahl Dateien gleichzeitig öffnen. Der Standard von C schreibt mit FOPEN_MAX in stdio.h vor, wie viele FILE-Objekte Sie maximal in einem Programm verwenden können. Laut Standard sollten es mindestens acht offene Streams (ohne die Standard-Streams stdin, stdout und stderr) sein. In der Praxis liegt dieser Wert allerdings meistens viel höher oder viel niedriger. Wenn Sie z. B. einen Mikrocontroller verwenden, können Sie z. B. nur so viele Dateien gleichzeitig öffnen, wie es serielle Schnittstellen gibt (denn meistens werden bei Mikrocontrollern die Daten hierüber umgeleitet). Unter Windows können Sie hingegen bis zu 255 Dateien gleichzeitig öffnen, unter Linux sogar 512.