setbuf(3S) setbuf(3S)
NAME
setbuf, setvbuf - Pufferung für Stream festlegen
SYNTAX
#include <stdio.h>
void setbuf(FILE *stream, char *buf);
int setvbuf(FILE *stream, char *buf, int type, sizet size);
BESCHREIBUNG
setbuf() kann verwendet werden, nachdem eine Stream-Datei eröffnet
wurde, aber bevor sie gelesen bzw. geschrieben wird. Es bewirkt, daß
das Feld, auf das buf zeigt, anstelle eines automatisch zugewiesenen
Puffers verwendet wird. Wenn buf der Nullzeiger ist, sind Eingabe und
Ausgabe völlig ungepuffert.
Die Puffergröße ist nicht begrenzt; die Konstante BUFSIZ, die in der
Include-Datei stdio.h definiert ist, bezeichnet jedoch eine geeignete
Puffergröße:
char buf[BUFSIZ];
setvbuf() kann verwendet werden, nachdem eine gepufferte Datei eröff-
net wurde, aber bevor sie gelesen bzw. geschrieben wird. type
bestimmt, wie stream gepuffert wird. Die zulässigen Werte für type (in
stdio.h definiert) haben folgende Bedeutung:
IOFBF vollständige Pufferung der Ein-/Ausgabe
IOLBF Zeilenpufferung der Ausgabe; der Puffer wird entleert, wenn
das Neue-Zeile-Zeichen geschrieben wird, der Puffer voll ist
oder eine Eingabe angefordert wird
IONBF keine Ein-/Ausgabe-Pufferung
Wenn buf nicht der Nullzeiger ist, wird das Feld, auf das gezeigt
wird, anstelle des automatisch zugewiesenen Puffers verwendet. size
gibt die Größe des zu verwendenden Puffers vor. Ist die Ein-/Ausgabe
nicht gepuffert, werden buf und size ignoriert.
ERGEBNIS
Wird ein unzulässiger Wert für type verwendet, dann gibt setvbuf()
einen Wert ungleich null zurück. Andernfalls wird null zurückgegeben.
HINWEISE
Eine häufige Fehlerquelle besteht darin, daß als Puffer in einem Pro-
grammblock eine Variable der Speicherklasse auto verwendet und die
Datei in diesem Block dann nicht geschlossen wird.
Seite 1 Reliant UNIX 5.44 Gedruckt 11/98
setbuf(3S) setbuf(3S)
Teile von buf werden für interne Verwaltungsinformationen des Streams
benötigt, deswegen enthält buf weniger als size Bytes wenn er voll
ist. Sie sollten bei der Verwendung von setvbuf() automatisch zugewie-
sene Puffer verwenden.
SIEHE AUCH
malloc(3C), fopen(3S), getc(3S), putc(3S), stdio(3S), stdio(5).
Seite 2 Reliant UNIX 5.44 Gedruckt 11/98