Namespaces
Variants

std:: setbuf

From cppreference.net
< cpp ‎ | io ‎ | c
Definiert im Header <cstdio>
void setbuf ( std:: FILE * stream, char * buffer ) ;

Legt den internen Puffer fest, der für I/O-Operationen verwendet wird, die auf dem C-Stream stream durchgeführt werden.

Wenn buffer nicht null ist, entspricht dies std:: setvbuf ( stream, buffer, _IOFBF , BUFSIZ ) .

Wenn buffer null ist, entspricht dies std:: setvbuf ( stream, nullptr, _IONBF , 0 ) , was die Pufferung deaktiviert.

Inhaltsverzeichnis

Parameter

stream - der Dateistream, auf 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. Wenn nicht null, muss er mindestens BUFSIZ Zeichen aufnehmen können

Rückgabewert

(keine)

Hinweise

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

std::setvbuf sollte ebenfalls zur Fehlererkennung verwendet werden, da std::setbuf keinen Erfolg oder Misserfolg anzeigt.

Diese Funktion darf nur verwendet werden, nachdem stream einer geöffneten Datei zugeordnet wurde, jedoch vor jedem anderen Vorgang (außer einem fehlgeschlagenen Aufruf von std::setbuf / std::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()
{
    char buf[BUFSIZ];
    std::setbuf(stdin, buf);
} // Lebensdauer von buf endet, undefiniertes Verhalten

Beispiel

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

#include <chrono>
#include <cstdio>
#include <thread>
int main()
{
    using namespace std::chrono_literals;
    std::setbuf(stdout, nullptr); // unbuffered stdout
    std::putchar('a'); // appears immediately on unbuffered stream
    std::this_thread::sleep_for(1s);
    std::putchar('b');
}

Ausgabe:

ab

Siehe auch

legt den Puffer und seine Größe für einen Dateistrom fest
(Funktion)
C-Dokumentation für setbuf