Namespaces
Variants

setbuf

Aus de.cppreference.net
< c | io
 
 
Datei-Ein-/Ausgabe
Typen und Objekte
        
Funktionen
Dateizugriff
(C95)
Unformatierte Ein-/Ausgabe
(C95)(C95)
(C95)
(C95)(C95)
(C95)
(C95)

Formatierte Eingabe
Direkte Ein-/Ausgabe
Formatierte Ausgabe
Dateipositionierung
Fehlerbehandlung
Operationen auf Dateien
 
Definiert in Header <stdio.h>
void setbuf( FILE* stream, char* buffer );
(bis C99)
void setbuf( FILE* restrict stream, char* restrict buffer );
(seit C99)
#define BUFSIZ  /* unspecified */

Setzt den internen Puffer, der für Stream-Operationen verwendet werden soll. Er sollte mindestens BUFSIZ Zeichen lang sein.

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

Falls buffer null ist, äquivalent zu setvbuf(stream, NULL, _IONBF, 0), was die Pufferung abschaltet.

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

Hinweise

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

setvbuf sollte auch zur Fehlererkennung verwendet werden, da setbuf keinen Erfolg oder Misserfolg anzeigt.

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

Ein häufiger Fehler ist, den Puffer von stdin oder stdout auf ein Array zu setzen, dessen Lebensdauer vor Programmende endet:

int main(void)
{
    char buf[BUFSIZ];
    setbuf(stdin, buf);
} // lifetime of buf ends, undefined behavior

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

  • C23-Standard (ISO/IEC 9899:2024):
  • 7.21.5.5 Die setbuf-Funktion (S.: TBD)
  • 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 Dateistream
(Funktion)
C++-Dokumentation für setbuf