std::basic_filebuf<CharT,Traits>::setbuf
| protected: virtual std::basic_streambuf<CharT, Traits>* setbuf( char_type* s, std::streamsize n ) |
||
Wenn s ein Nullzeiger ist und n Null ist, wird der Dateipuffer für die Ausgabe ungepuffert, was bedeutet, dass pbase() und pptr() Null sind und jede Ausgabe sofort an die Datei gesendet wird.
Andernfalls ersetzt ein Aufruf von setbuf() den internen Puffer (die gesteuerte Zeichensequenz) durch das vom Benutzer bereitgestellte Zeichenarray, dessen erstes Element von s gezeigt wird, und erlaubt diesem std::basic_filebuf-Objekt, bis zu n Bytes in diesem Array für das Puffern zu verwenden.
Diese Funktion ist geschützt virtuell und darf nur über pubsetbuf() oder aus Memberfunktionen einer benutzerdefinierten Klasse, die von std::basic_filebuf abgeleitet ist, aufgerufen werden.
Inhalt |
[edit] Parameter
| s | - | Zeiger auf das erste CharT im vom Benutzer bereitgestellten Puffer oder Null |
| n | - | die Anzahl der CharT-Elemente im vom Benutzer bereitgestellten Puffer oder Null |
[edit] Rückgabewert
this
[edit] Hinweise
Die Bedingungen, unter denen diese Funktion verwendet werden kann, und die Art und Weise, wie der bereitgestellte Puffer verwendet wird, sind implementierungsabhängig.
- GCC 4.6 libstdc++
-
setbuf()darf nur aufgerufen werden, wenn der std::basic_filebuf nicht mit einer Datei verbunden ist (andernfalls hat er keine Auswirkung). Mit einem vom Benutzer bereitgestellten Puffer werden beim Lesen aus der Datei jeweilsn-1Bytes gelesen.
- Clang++3.0 libc++
-
setbuf()kann nach dem Öffnen der Datei, aber vor jeglicher I/O aufgerufen werden (kann andernfalls abstürzen). Mit einem vom Benutzer bereitgestellten Puffer werden beim Lesen aus der Datei die größten Vielfachen von 4096 gelesen, die in den Puffer passen.
- Visual Studio 2010
-
setbuf()kann jederzeit aufgerufen werden, auch nachdem bereits I/O stattgefunden hat. Der aktuelle Inhalt des Puffers geht verloren, falls vorhanden.
Der Standard definiert kein Verhalten für diese Funktion, außer dass setbuf(0, 0), aufgerufen vor jeglicher I/O, dazu verpflichtet ist, die Ausgabe ungepuffert einzustellen.
[edit] Beispiel
Stellt einen 10-KB-Puffer zum Lesen bereit. Unter Linux kann das Hilfsprogramm strace verwendet werden, um die tatsächlich gelesene Byteanzahl zu beobachten.
#include <fstream> #include <iostream> #include <string> int main() { int cnt = 0; std::ifstream file; char buf[10241]; file.rdbuf()->pubsetbuf(buf, sizeof buf); file.open("/usr/share/dict/words"); for (std::string line; getline(file, line);) ++cnt; std::cout << cnt << '\n'; }
Mögliche Ausgabe
356010
[edit] Fehlerberichte
Die folgenden Verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | angewendet auf | Verhalten wie veröffentlicht | Korrigiertes Verhalten |
|---|---|---|---|
| LWG 173 | C++98 | Der Typ von n wurde fälschlicherweise als int angegeben | korrigiert zu std::streamsize |
[edit] Siehe auch
| ruft setbuf() auf (öffentliche Member-Funktion von std::basic_streambuf<CharT,Traits>) | |
| setzt den Puffer und seine Größe für einen Dateistream (function) |