setbuf

Aus RAD Studio
Wechseln zu: Navigation, Suche

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++

+

+

+

+