Provided by:
manpages-de-dev_0.10-1_all 
BEZEICHNUNG
setbuf, setvbuf - Stream-Puffer Funktionen
Diese Handbuchseite ist eventuell veraltet. Im Zweifelsfall ziehen Sie
die englischsprachige Handbuchseite zu Rate, indem Sie
man -LC 3 setbuf
eingeben.
"UBERSICHT
#include <stdio.h>
int setbuf( FILE *stream, char *buf);
void setbuffer(FILE *stream, char *buf, size_tsize);
void setlinebuf(FILE *stream);
int setvbuf( FILE *stream, char *buf, int mode , size_t size);
BESCHREIBUNG
Die drei Typen der verfugbaren Pufferungen sind nicht-gepuffert, block-
gepuffert und zeilen-gepuffert. Wenn ein Ausgabe-Stream ungepuffert
ist, erscheinen die Informationen in der Zieldatei oder auf dem
Terminal direkt nachdem sie geschrieben wurden. Wenn die Ausgabe
block-gepuffert ist, werden viele Zeichen erst einmal gesammelt und
dann in einem Rutsch ausgegeben. Wenn die Ausgabe zeilen-gepuffert
ist, werden die Zeichen bis zu einem Newline-Zeichen gesammelt und erst
dann ausgegeben, oder Eingaben wurden von einem beliebigen Datenstrom
gelesen, der mit dem Eingabegerat verbunden ist (ublicherweise stdin).
Die Funktion fflush(3) darf dazu verwendet werden, ein Leeren des
Puffers zu erzwingen. (Siehe auch fclose(3)) Normalerweise sind alle
Dateien block-gepuffert. Wenn die erste I/O-Operation auf einer Datei
durchgefuhrt wird, wird malloc(3) aufgerufen und ein Puffer wird
angelegt. Wenn ein Datenstrom mit einem Terminal verbunden ist (wie
stdout normalerweise), ist er zeilen-gepuffert. Der normale
Fehlerstrom (stderr) ist per default immer nicht-gepuffert.
Die Funktion setvbuf wird genutzt, um zu jedem beliebigen Zeitpunkt die
Pufferung eines geoffneten Streams zu andern. Als mode - Parameter
wird einer der drei folgenden Konstanten verwendet:
_IONBF Nicht gepuffert
_IOLBF Zeilenpufferung
_IOFBF Blockpufferung
Mit Ausnahme von ungepufferten Dateien sollte mit buf ein Zeiger auf
einen Puffer angegeben werden, der mindestens size Byte groB ist.
Dieser Puffer wird anstelle des momentanen Puffers verwendet. Wenn fur
buf NULL, angegeben wird, wird nur mode modifiziert. Bei der naechsten
Schreib- oder Leseoperation wird ein neuer Puffer allokiert. Die
Funktion setvbuf kann nur dann auf einen geoffneten Stream angewendet
werden, wenn er nicht ``aktiv'' ist. Das heiBt, vor der ersten Ein-
bzw. Ausgabe oder unmittelbar nach einem fflush.
Die anderen drei Funktionen sind im Endeffekt einfache Aliase fur
Aufrufe von setvbuf. Die Funktion setbuf entspricht genau dem
folgendem Aufruf:
setvbuf(stream, buf, buf ? _IOFBF : _IONBF, BUFSIZ);
Die Funktion setbuffer ist die gleiche, bis auf die Tatsache, dass die
GroBe des Puffers vom Aufrufer bestimmt wird anstatt von der
Voreinstellung BUFSIZ ubernommen wird. Die Funktion setlinebuf
entspricht genau dem folgendem Aufruf:
setvbuf(stream, (char *)NULL, _IOLBF, 0);
KONFORM ZU
Die Funktionen setbuf und setvbuf sind konform zu ANSI C3.159-1989
(ANSI C).
Fehler
Die Funktionen setbuffer und setlinebuf sind keine portablen Versionen
von BSD vor 4.2BSD, setbuf nutzt immer eine nichtoptimale PuffergroBe
und sollte deshalb vermieden werden.
Es muss sichergestellt sein, dass der Puffer buf zu dem Zeitpunkt, zu
dem der Stream stream geschlossen wird, noch existiert, was ebenfalls
bei Programmende geschieht.
Im folgenden Beispiel wird der Stream stdin erst geschlossen wenn buf
nicht mehr existiert. Dieser Code ist nicht zulassig:
#include <stdio.h>
int main()
{
char buf[BUFSIZ];
setbuf(stdin, buf);
printf("Hello, world!\n");
return 0;
}
SIEHE AUCH
fopen(3), fflush(3), fclose(3), fread(3), malloc(3), puts(3),
printf(3).