14.11    Pufferung

An dieser Stelle möchten wir Ihnen noch ein paar kurze Erklärungen zur Datenpufferung geben, da die Verwendung einer optimalen Puffergröße Ihre Dateizugriffe enorm beschleunigen kann (und eine nicht optimale Puffergröße verlangsamt natürlich den Ablauf). Die Standardeinstellung ist bei ANSI-C-Compilern die Vollpufferung. Das ist oft sinnvoller und schneller, als jedes einzelne Zeichen zu lesen oder zu schreiben, denn es finden ja immer nur blockweise Lese- und Schreiboperationen auf der Festplatte oder auf dem Arbeitsspeicher statt. Die Puffergröße ist natürlich auch abhängig vom Compiler, liegt aber meistens zwischen 512 und 4.096 Bytes. Die Puffergröße ist in der Header-Datei stdio.h in der Konstante BUFSIZ definiert.

Das bedeutet allerdings nicht, dass Sie von der Vollpufferung abhängig sind. Wenn Sie eine andere Pufferung für einen Stream verwenden möchten, können Sie dies mit den Funktionen setbuf() oder setvbuf() nach dem Öffnen eines Streams mittels fopen() ändern. Folgende Pufferungsarten können Sie verwenden:

fflush nur für Ausgabe-Streams

Die Funktion fflush() ist hilfreich für Ausgabe-Streams und sorgt dafür, dass alle noch im Puffer befindlichen und nicht geschriebenen Daten auf die Festplatte geschrieben werden. Nicht verwenden dürfen Sie die Funktion jedoch auf einen Eingabe-Stream, weil hier das weitere Verhalten laut Standard undefiniert ist. Ein fflush(stdin) mag zwar bei einigen Compilern funktionieren, um den Eingabepuffer der Tastatur zu »leeren«, aber es bleibt trotzdem dabei, dass die Verwendung dieser Funktion auf einen Eingabe-Stream per Standard nicht erlaubt ist.