Namespaces
Variants

setbuf

From cppreference.net
< c ‎ | io
Definiert im Header <stdio.h>
void setbuf ( FILE * stream, char * buffer ) ;
(bis C99)
void setbuf ( FILE * restrict stream, char * restrict buffer ) ;
(seit C99)
#define BUFSIZ     /*unspecified*/

Legt den internen Puffer für Stream-Operationen fest. Er sollte mindestens BUFSIZ Zeichen lang sein.

Wenn buffer nicht null ist, äquivalent zu setvbuf ( stream, buffer, _IOFBF , BUFSIZ ) .

Wenn buffer null ist, entspricht dies setvbuf ( stream, NULL , _IONBF , 0 ) , wodurch die Pufferung deaktiviert wird.

Inhaltsverzeichnis

Parameter

stream - der Dateistream, für den der Puffer gesetzt werden soll
buffer - Zeiger auf einen Puffer, den der Stream verwenden soll. Wenn ein Nullzeiger übergeben wird, wird die Pufferung deaktiviert

Rückgabewert

Keine.

Hinweise

Wenn BUFSIZ nicht die geeignete Puffergröße ist, kann setvbuf verwendet werden, um diese zu ändern.

setvbuf sollte ebenfalls zur Fehlererkennung verwendet werden, da setbuf keinen Erfolg oder Fehler anzeigt.

Diese Funktion darf nur verwendet werden, nachdem stream mit einer geöffneten Datei verknüpft wurde, aber vor jedem anderen Vorgang (außer einem fehlgeschlagenen Aufruf von setbuf / setvbuf ).

Ein häufiger Fehler ist das Setzen des Puffers von stdin oder stdout auf ein Array, dessen Lebensdauer vor dem Programmende abläuft:

int main(void) {
    char buf[BUFSIZ];
    setbuf(stdin, buf);
} // Lebensdauer von buf endet, undefiniertes Verhalten

Beispiel

setbuf kann verwendet werden, um die Pufferung auf Streams zu deaktivieren, die sofortige Ausgabe erfordern.

#include <stdio.h>
#include <threads.h>
int main(void)
{
    setbuf(stdout, NULL); // unbuffered stdout
    putchar('a'); // 'a' appears immediately if stdout is unbuffered
    thrd_sleep(&(struct timespec){.tv_sec=1}, NULL); // sleep 1 sec
    putchar('b'); 
}

Ausgabe:

ab

Referenzen

  • C17-Standard (ISO/IEC 9899:2018):
  • 7.21.5.5 Die setbuf-Funktion (S: 225)
  • C11-Standard (ISO/IEC 9899:2011):
  • 7.21.5.5 Die setbuf-Funktion (S. 307-308)
  • C99-Standard (ISO/IEC 9899:1999):
  • 7.19.5.5 Die setbuf-Funktion (S. 273)
  • C89/C90 Standard (ISO/IEC 9899:1990):
  • 4.9.5.5 Die setbuf-Funktion

Siehe auch

setzt den Puffer und seine Größe für einen Dateistrom
(Funktion)