Namespaces
Variants

std::basic_filebuf<CharT,Traits>:: setbuf

From cppreference.net
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 jeweils n-1 Bytes.
  • 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)