std::setbuf
| 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) | |
| C-Dokumentation für setbuf
| |