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 filebuf
ungepuffert
für die Ausgabe, 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 Zeichenfolge) mit dem benutzerdefinierten Zeichenarray, dessen erstes Element durch
s
gezeigt wird, und erlaubt diesem
std::basic_filebuf
-Objekt, bis zu
n
Bytes in diesem Array für die Pufferung zu verwenden.
Diese Funktion ist geschützt virtuell, sie darf nur über
pubsetbuf()
oder von Memberfunktionen einer benutzerdefinierten Klasse aufgerufen werden, die von
std::basic_filebuf
abgeleitet ist.
Inhaltsverzeichnis |
Parameter
| s | - |
Zeiger auf das erste
CharT
im benutzerbereitgestellten Puffer oder null
|
| n | - |
die Anzahl der
CharT
Elemente im benutzerbereitgestellten Puffer oder null
|
Rückgabewert
this
Hinweise
Die Bedingungen, unter denen diese Funktion verwendet werden kann, und die Art und Weise, wie der bereitgestellte Puffer verwendet wird, sind implementierungsdefiniert.
- GCC 4.6 libstdc++
-
setbuf()darf nur aufgerufen werden, wenn der std::basic_filebuf nicht mit einer Datei assoziiert ist (hat andernfalls keine Wirkung). Mit einem benutzerdefinierten Puffer liest das Lesen aus der Datei jeweilsn-1Bytes.
- Clang++3.0 libc++
-
setbuf()kann nach dem Öffnen der Datei aufgerufen werden, jedoch vor jeglicher Ein-/Ausgabe (andernfalls kann es zu einem Absturz kommen). Mit einem benutzerdefinierten Puffer liest das Lesen aus der Datei die größten Vielfachen von 4096, die in den Puffer passen.
- Visual Studio 2010
-
setbuf()kann jederzeit aufgerufen werden, auch nachdem bereits einige E/A-Operationen stattgefunden haben. Der aktuelle Inhalt des Puffers, falls vorhanden, geht verloren.
Der Standard definiert kein Verhalten für diese Funktion, außer dass setbuf ( 0 , 0 ) aufgerufen vor jeglicher I/O-Operation ungepufferte Ausgabe setzen muss.
Beispiel
Stellt einen 10k-Puffer für Lesevorgänge bereit. Unter Linux kann das strace-Utility verwendet werden, um die tatsächliche Anzahl der gelesenen Bytes 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
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 war falsch spezifiziert als int | korrigiert zu std::streamsize |
Siehe auch
|
ruft
setbuf
(
)
(öffentliche Elementfunktion von
std::basic_streambuf<CharT,Traits>
)
|
|
|
setzt den Puffer und seine Größe für einen Dateistrom
(Funktion) |