setbuf
Nach oben zu stdio.h - Index
Header-Datei
stdio.h
Kategorie
Eingabe-/Ausgaberoutinen
Prototyp
void setbuf(FILE *stream, char *buf);
Beschreibung
Weist einem Stream einen Puffer zu.
setbuf bewirkt, dass der Puffer buf statt eines automatisch zugewiesenen Puffers für die gepufferte Ein-/Ausgabe verwendet wird. Die Funktion wird verwendet, nachdem der Stream geöffnet wurde.
Ist buf NULL, werden Ein-/Ausgaben nicht gepuffert; andernfalls sind sie voll gepuffert. Der Puffer muss BUFSIZ (definiert in stdio.h) Bytes groß sein.
Sind stdin und stdout nicht umgeleitet, dann sind sie nicht gepuffert; andernfalls sind sie voll gepuffert. Mit setbuf kann die Pufferung dieser Standard-Streams geändert werden.
Nicht gepuffert bedeutet, dass die in einen Stream geschriebenen Zeichen sofort in die Datei oder das Gerät ausgegeben werden, während gepuffert bedeutet, dass die Zeichen zunächst gesammelt und dann als Block geschrieben werden.
setbuf liefert nicht vorhersagbare Ergebnisse, wenn die Funktion nicht unmittelbar nach dem Öffnen eines Streams oder nach einem Aufruf von fseek aufgerufen wird. Der Aufruf von setbuf nach der Deaktivierung der Pufferung des Streams ist legal und führt zu keinen Problemen.
Häufige Ursache eines Fehlers ist die Zuweisung des Puffers in Form einer automatischen (lokalen) Variablen, wobei dann vergessen wird, die Datei vor dem Verlassen der Funktion, in der der Puffer deklariert wurde, zu schließen.
Rückgabewert
Keiner.
Beispiel
#include <stdio.h>
/* BUFSIZ ist in stdio.h definiert */
char outbuf[BUFSIZ];
int main(void)
{
/* Dem Standardausgabe-Stream einen Puffer zuweisen */
setbuf(stdout, outbuf);
/* Einige Zeichen in den Puffer schreiben */
puts("This is a test of buffered output.\n\n");
puts("This output will go into outbuf\n");
puts("and won't appear until the buffer\n");
puts("fills up or we flush the stream.\n");
/* Ausgabepuffer schreiben */
fflush(stdout);
return 0;
}
Portabilität
POSIX | Win32 | ANSI C | ANSI C++ |
---|---|---|---|
+ |
+ |
+ |
+ |