setbuffer(3S) (BSD Compatibility Package) setbuffer(3S)
NAME
setbuffer, setlinebuf - Einem Datenstrom Puffer zuordnen
SYNTAX
/usr/ucb/cc [flag ...] file ... -lucb
#include <stdio.h>
setbuffer(stream, buf, size)
FILE *stream;
char *buf;
int size;
setlinebuf(stream)
FILE *stream;
BESCHREIBUNG
Die drei verfügbaren Puffermöglichkeiten sind "nicht gepuffert",
"Blockpufferung" und "Zeilenpufferung". Wenn ein Ausgabedatenstrom
nicht gepuffert ist, werden die Daten direkt in der Zieldatei oder am
Terminal angezeigt. Bei Blockpufferung werden viele Zeichen gespei-
chert und dann als Block geschrieben. Bei Zeilenpufferung werden alle
Zeichen bis zu einem Zeilenvorschub (NEWLINE) gespeichert oder die
Eingabe aus jedem zeilengepufferten Eingabestrom wird gelesen. fflush
kann verwendet werden, um die Zeichen aus einem Blockpuffer vorzeitig
auszugeben. Normalerweise sind alle Dateien blockgepuffert. Ein Puffer
wird durch malloc beim ersten Abrufen (getc) oder Schreiben (putc) von
Zeichen aus der/in die Datei zugeordnet.
Standardmäßig ist die Ausgabe an ein Terminal zeilengepuffert, mit
Ausnahme der Ausgabe an den Standarddatenstrom stderr, die nicht
gepuffert ist. Die restliche Ein-/Ausgabe ist vollständig gepuffert.
setbuffer kann nach dem Öffnen eines Datenstroms verwendet werden,
jedoch nicht mehr, nachdem er gelesen oder in ihn geschrieben wurde.
Das Zeichen-Array buf, dessen Größe durch das Argument size festgelegt
wird, wird anstelle eines automatisch zugeordneten Puffers verwendet.
Handelt es sich bei buf um den NULL-Zeiger, ist die Ein-/Ausgabe nicht
gepuffert. Eine Konstante BUFSIZ, definiert in der Include-Datei
<stdio.h>, gibt die erforderliche Größe des Arrays an:
char buf[BUFSIZ];
Mit setlinebuf wird die Puffermethode eines Datenstroms von blockge-
puffert oder nicht gepuffert in zeilengepuffert geändert. Anders als
mit setbuffer kann diese Funktion zu jeder Zeit, wenn der Datei-
Deskriptor aktiv ist, verwendet werden.
Seite 1 Reliant UNIX 5.44 Gedruckt 11/98
setbuffer(3S) (BSD Compatibility Package) setbuffer(3S)
Die Pufferung einer Datei kann mit freopen von nicht gepuffert oder
von zeilengepuffert in blockgepuffert geändert werden. Mit freopen,
gefolgt von setbuffer mit dem Pufferargument NULL, kann die Pufferung
einer Datei von block- oder zeilengepuffert in nicht gepuffert geän-
dert werden.
HINWEISE
Eine typische Fehlerquelle liegt darin, daß Pufferbereich als "automa-
tische" Variable in einem Codeblock zugeordnet wird, ohne anschließend
den Datenstrom im selben Block zu schließen.
SIEHE AUCH
malloc(3C), fclose(3S), getc(3S), fopen(3S), fread(3S), printf(3S),
putc(3S), puts(3S).
Seite 2 Reliant UNIX 5.44 Gedruckt 11/98