Namensräume
Varianten
Aktionen

std::setbuf

Von cppreference.com
< cpp‎ | io‎ | c
 
 
 
C-Style I/O
Typen und Objekte
Funktionen
Datei-Zugriff
setbuf

Direkte Ein-/Ausgabe
Unformatierte Ein-/Ausgabe
Formatierte Eingabe
(C++11)(C++11)(C++11)    
(C++11)(C++11)(C++11)    
 
Definiert in Header <cstdio>
void setbuf( std::FILE* stream, char* buffer );

Setzt den internen Puffer für E/A-Operationen, die auf dem C-Stream stream ausgeführt werden.

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

Wenn buffer null ist, ist dies äquivalent zu std::setvbuf(stream, nullptr, _IONBF, 0), was die Pufferung ausschaltet.

Inhalt

[edit] Parameter

stream - Der zu konfigurierende Dateistream
buffer - Zeiger auf einen Puffer, den der Stream verwenden soll. Wenn ein Nullzeiger übergeben wird, wird die Pufferung ausgeschaltet. Wenn nicht null, muss er mindestens BUFSIZ Zeichen aufnehmen können.

[edit] Rückgabewert

(keine)

[edit] Hinweise

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

std::setvbuf sollte auch verwendet werden, um Fehler zu erkennen, da std::setbuf keinen Erfolg oder Misserfolg anzeigt.

Diese Funktion darf nur aufgerufen werden, nachdem stream mit einer offenen Datei verknüpft wurde, aber vor jeder anderen Operation (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 endet.

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

[edit] Beispiel

std::setbuf kann verwendet werden, um die Pufferung für Streams zu deaktivieren, die eine 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

[edit] Siehe auch

setzt den Puffer und seine Größe für einen Dateistream
(function) [bearbeiten]
C-Dokumentation für setbuf