basic_streambuf-Klasse

Beschreibt eine abstrakte Basisklasse für das Ableiten eines Streampuffers, die die Übertragung von Elementen an eine bestimmte und von einer bestimmten Darstellung eines Streams steuert.

Syntax

template <class Elem, class Tr = char_traits<Elem>>
class basic_streambuf;

Parameter

Elem
Ein char_type.

Tr
Der traits_type der Zeichen.

Hinweise

Die Klassenvorlage beschreibt eine abstrakte Basisklasse zum Ableiten eines Datenstrompuffers, die die Übertragung von Elementen an und von einer bestimmten Darstellung eines Datenstroms steuert. Ein Klassenobjekt basic_streambuf hilft beim Steuern eines Datenstroms mit Elementen vom Typ Tr, auch bekannt als char_type, deren Zeicheneigenschaften durch die Klasse char_traits bestimmt werden, auch als traits_type bezeichnet.

Jeder Streampuffer steuert konzeptuell zwei unabhängige Streams: einen für Extraktionen (Eingabe) und einen für Einfügungen (Ausgabe). Eine bestimmte Darstellung kann jedoch den Zugriff auf einen oder beide Streams unmöglich machen. In der Regel besteht eine bestimmte Beziehung zwischen den beiden Streams. Was Sie in den Ausgabedatenstrom eines basic_stringbufElem< einfügen, Tr> z. B. das Objekt, wird später aus dem Eingabedatenstrom extrahiert. Wenn Sie einen Datenstrom eines basic_filebufElem< positionieren, Tr> positionieren Sie den anderen Datenstrom zusammen.

Die öffentliche Schnittstelle zur Klassenvorlage basic_streambuf stellt die Vorgänge bereit, die allen Datenstrompuffern gemeinsam sind, jedoch spezialisiert. Die geschützte Schnittstelle stellt die Vorgänge bereit, die für die Verwendung einer bestimmten Darstellung eines Streams benötigt werden. Über die geschützten virtuellen Memberfunktionen können Sie das Verhalten eines abgeleiteten Streampuffers für eine bestimmte Darstellung eines Streams anpassen. Jeder abgeleitete Streampuffer in dieser Bibliothek beschreibt, wie er das Verhalten seiner geschützten virtuellen Memberfunktionen spezialisiert. Das Standardverhalten für die Basisklasse, die häufig nichts zu tun hat, wird in diesem Artikel beschrieben.

Die verbleibenden geschützten Memberfunktionen steuern das Kopieren in und aus Speicher, der zum Puffern von Übertragungen in und aus Streams bereitgestellt wird. Ein Eingabepuffer ist z. B. durch folgende Merkmale charakterisiert:

  • eback, einen Zeiger auf den Anfang des Puffers.

  • gptr, einen Zeiger auf das nächste zu lesende Element.

  • egptr, ein Zeiger über das Ende des Puffers.

Entsprechend ist ein Ausgabepuffer gekennzeichnet durch:

  • pbase, einen Zeiger auf den Anfang des Puffers.

  • pptr, einen Zeiger auf das nächste zu schreibende Element.

  • epptr, ein Zeiger über das Ende des Puffers.

Für alle Puffer wird das folgende Protokoll verwendet:

  • Wenn der Zeiger für das nächste Element NULL ist, ist kein Puffer vorhanden. Ansonsten zeigen alle drei Zeiger in dieselbe Sequenz. Sie können problemlos in Bezug auf die Reihenfolge verglichen werden.

  • Wenn bei einem Ausgabepuffer der Zeiger für das nächste Element kleiner als der Endzeiger ist, können Sie ein Element an der vom Zeiger für das nächste Element bezeichneten Schreibposition speichern.

  • Wenn bei einem Eingabepuffer der Zeiger für das nächste Element kleiner als der Endzeiger ist, können Sie ein Element an der vom Zeiger für das nächste Element bezeichneten Leseposition lesen.

  • Wenn bei einem Eingabepuffer der Startzeiger kleiner als der Zeiger für das nächste Element ist, können Sie ein Element an der vom verminderten Zeiger für das nächste Element bezeichneten Position wiederherstellen.

Alle geschützten virtuellen Memberfunktionen, die Sie für eine klasse schreiben, von basic_streambuf<Elemder abgeleitet wird, Tr> müssen in Standard taining this protocol zusammenarbeiten.

Ein Objekt der Klasse basic_streambuf<Elemspeichert Tr> die zuvor beschriebenen sechs Zeiger. Außerdem speichert es ein Gebietsschemaobjekt in einem Objekt vom Typ locale für die mögliche Verwendung durch einen abgeleiteten Streampuffer.

Konstruktoren

Konstruktor Beschreibung
basic_streambuf Konstruiert ein Objekt vom Typ basic_streambuf.

TypeDefs

Typname Beschreibung
char_type Verknüpft einen Typnamen mit dem Elem-Vorlagenparameter.
int_type Verknüpft einen Typnamen im Geltungsbereich von basic_streambuf mit dem Elem-Vorlagenparameter.
off_type Verknüpft einen Typnamen im Geltungsbereich von basic_streambuf mit dem Elem-Vorlagenparameter.
pos_type Verknüpft einen Typnamen im Geltungsbereich von basic_streambuf mit dem Elem-Vorlagenparameter.
traits_type Verknüpft einen Typnamen mit dem Tr-Vorlagenparameter.

Memberfunktionen

Memberfunktion Beschreibung
eback Eine geschützte Funktion, die einen Zeiger auf den Anfang des Eingabepuffers zurückgibt.
egptr Eine geschützte Funktion, die einen Zeiger über das Ende des Eingabepuffers zurückgibt.
epptr Eine geschützte Funktion, die einen Zeiger über das Ende des Ausgabepuffers zurückgibt.
gbump Eine geschützte Funktion, die dem nächsten Zeiger für den Eingabepuffer count hinzufügt.
getloc Ruft das Gebietsschema des basic_streambuf-Objekts ab.
gptr Eine geschützte Funktion, die einen Zeiger auf das nächste Element des Eingabepuffers zurückgibt.
imbue Eine geschützte virtuelle Funktion, die von pubimbue aufgerufen wird.
in_avail Gibt die Anzahl von Elementen zurück, die aus dem Puffer gelesen werden können.
overflow Eine geschützte virtuelle Funktion, die aufgerufen werden kann, wenn ein neues Zeichen in einen vollen Puffer eingefügt wird.
pbackfail Eine geschützte virtuelle Memberfunktion, die versucht, ein Element zurück in den Eingabestream zu versetzen und es dann zum aktuellen Element zu ernennen (es wird mit dem Zeiger für das nächste Element darauf gezeigt).
pbase Eine geschützte Funktion, die einen Zeiger auf den Anfang des Ausgabepuffers zurückgibt.
pbump Eine geschützte Funktion, die dem nächsten Zeiger für den Ausgabepuffer count hinzufügt.
pptr Eine geschützte Funktion, die einen Zeiger auf das nächste Element des Ausgabepuffers zurückgibt.
pubimbue Legt das Gebietsschema des basic_streambuf-Objekts fest.
pubseekoff Ruft seekoff auf, eine geschützte virtuelle Funktion, die in einer abgeleiteten Klasse überschrieben wird.
pubseekpos Ruft seekpos auf, eine geschützte virtuelle Funktion, die in einer abgeleiteten Klasse überschrieben wird, und die aktuelle Zeigerposition zurücksetzt.
pubsetbuf Ruft setbuf auf, eine geschützte virtuelle Funktion, die in einer abgeleiteten Klasse überschrieben wird.
pubsync Ruft sync auf, eine geschützte virtuelle Funktion, die in einer abgeleiteten Klasse überschrieben wird, und den externen Stream für diesen Puffer aktualisiert.
sbumpc Liest das aktuelle Element, gibt es zurück und bewegt den Streamzeiger.
seekoff Die geschützte virtuelle Memberfunktion versucht, die aktuellen Positionen für die gesteuerten Streams zu ändern.
seekpos Die geschützte virtuelle Memberfunktion versucht, die aktuellen Positionen für die gesteuerten Streams zu ändern.
setbuf Die geschützte virtuelle Memberfunktion führt einen für jeden abgeleiteten Streampuffer bestimmten Vorgang aus.
setg Eine geschützte Funktion, die _Gbeg im Startzeiger, _Gnext im nächssten Zeiger und _Gend im Endzeiger für den Eingabepuffer speichert.
setp Eine geschützte Funktion, die _Pbeg im Startzeiger und _Pend im Endzeiger für den Ausgabepuffer speichert.
sgetc Gibt das aktuelle Element ohne Änderung der Position im Stream zurück.
sgetn Gibt die Anzahl der gelesenen Elemente zurück.
showmanyc Geschützte virtuelle Memberfunktion, die eine Anzahl der Zeichen zurückgibt, die aus dem Eingabedatenstrom extrahiert werden können. Außerdem wird sichergestellt, dass das Programm nicht einer unbegrenzten Wartezeit unterliegt.
snextc Liest das aktuelle Element und gibt das folgende Element zurück.
sputbackc Schreibt einen char_type in den Stream.
sputc Setzt ein Zeichen in den Stream.
sputn Setzt eine Zeichenfolge in den Stream.
stossc Verschiebt den Zeiger hinter das aktuelle Element im Stream.
sungetc Ruft ein Zeichen aus dem Stream ab.
swap Tauscht die Werte in diesem Objekt mit den Werten im bereitgestellten basic_streambuf-Objektparameter.
sync Eine geschützte virtuelle Funktion, die versucht, die gesteuerten Streams mit zugehörigen externen Streams zu synchronisieren.
uflow Eine geschützte virtuelle Funktion, die das aktuelle Element aus dem Eingabestream extrahiert.
underflow Eine geschützte virtuelle Funktion, die das aktuelle Element aus dem Eingabestream extrahiert.
xsgetn Eine geschützte virtuelle Funktion, die Elemente aus dem Eingabestream extrahiert.
xsputn Eine geschützte virtuelle Funktion, die Elemente in den Ausgabestream einfügt.

Operatoren

Operator Beschreibung
operator= Weist die Werte dieses Objekts aus einem anderen basic_streambuf-Objekt zu.

Anforderungen

Header:<streambuf>

Namespace: std

basic_streambuf::basic_streambuf

Konstruiert ein Objekt vom Typ basic_streambuf.

basic_streambuf();

basic_streambuf(const basic_streambuf& right);

Parameter

right
Ein lvalue-Verweis auf das basic_streambuf-Objekt, das dazu verwendet wird, Werte für dieses basic_streambuf-Objekt festzulegen.

Hinweise

Der erste geschützte Konstruktor speichert einen NULL-Zeiger in allen Zeigern, die den Eingabe- und Ausgabepuffer steuern. Er speichert auch locale::classic im locale-Objekt. Weitere Informationen finden Sie unter locale::classic.

Der zweite geschützte Konstruktor kopiert die Zeiger und das Gebietsschema von rechts.

basic_streambuf::char_type

Verknüpft einen Typnamen mit dem Vorlagenparameter Elem.

typedef Elem char_type;

basic_streambuf::eback

Eine geschützte Funktion, die einen Zeiger auf den Anfang des Eingabepuffers zurückgibt.

char_type *eback() const;

Rückgabewert

Ein Zeiger auf den Anfang des Eingabepuffers.

basic_streambuf::egptr

Eine geschützte Funktion, die einen Zeiger über das Ende des Eingabepuffers zurückgibt.

char_type *egptr() const;

Rückgabewert

Ein Zeiger über das Ende des Eingabepuffers.

basic_streambuf::epptr

Eine geschützte Funktion, die einen Zeiger über das Ende des Ausgabepuffers zurückgibt.

char_type *epptr() const;

Rückgabewert

Ein Zeiger über das Ende des Ausgabepuffers.

basic_streambuf::gbump

Eine geschützte Funktion, die dem nächsten Zeiger für den Eingabepuffer anzahl hinzufügt.

void gbump(int count);

Parameter

count
Der Betrag, um den der Zeiger nach vorne verschoben werden soll.

basic_streambuf::getloc

Ruft das Gebietsschema des Objekts „basic_streambuf“ ab.

locale getloc() const;

Rückgabewert

Das gespeicherte Gebietsschemaobjekt.

Hinweise

Weitere Informationen finden Sie unter ios_base::getloc.

Beispiel

// basic_streambuf_getloc.cpp
// compile with: /EHsc
#include <iostream>

int main( )
{
   using namespace std;
   cout << cout.rdbuf( )->getloc( ).name( ).c_str( ) << endl;
}
C

basic_streambuf::gptr

Eine geschützte Funktion, die einen Zeiger auf das nächste Element des Eingabepuffers zurückgibt.

char_type *gptr() const;

Rückgabewert

Ein Zeiger auf das nächste Element des Eingabepuffers.

basic_streambuf::imbue

Eine geschützte virtuelle Funktion, die von pubimbue aufgerufen wird.

virtual void imbue(const locale& _Loc);

Parameter

_Loc
Ein Verweis auf ein Gebietsschema.

Hinweise

Standardmäßig wird nichts unternommen.

basic_streambuf::in_avail

Gibt die Anzahl von Elementen zurück, die aus dem Puffer gelesen werden können.

streamsize in_avail();

Rückgabewert

Die Anzahl von Elementen, die aus dem Puffer gelesen werden können.

Hinweise

Wenn eine Leseposition verfügbar ist, gibt die Memberfunktion egptr - gptr zurück. Andernfalls wird showmanyc zurückgegeben.

Beispiel

// basic_streambuf_in_avail.cpp
// compile with: /EHsc
#include <iostream>

int main( )
{
   using namespace std;
   char c;
   // cin's buffer is empty, in_avail will return 0
   cout << cin.rdbuf( )->in_avail( ) << endl;
   cin >> c;
   cout << cin.rdbuf( )->in_avail( ) << endl;
}

basic_streambuf::int_type

Ordnet einen Typnamen innerhalb des Bereichs von „basic_streambuf“ einem der Typen in einem Vorlagenparameter zu.

typedef typename traits_type::int_type int_type;

basic_streambuf::off_type

Ordnet einen Typnamen innerhalb des Bereichs von „basic_streambuf“ einem der Typen in einem Vorlagenparameter zu.

typedef typename traits_type::off_type off_type;

basic_streambuf::operator=

Weist die Werte dieses Objekts aus einem anderen basic_streambuf-Objekt zu.

basic_streambuf& operator=(const basic_streambuf& right);

Parameter

right
Ein lvalue-Verweis auf das basic_streambuf-Objekt, das dazu verwendet wird, diesem Objekt Werte zuzuweisen.

Hinweise

Der geschützte Memberoperator kopiert von rechts die Zeiger, die den Eingabepuffer und den Ausgabepuffer steuern. Außerdem speichert er right.getloc() im locale object. Er gibt *this zurück.

basic_streambuf::overflow

Eine geschützte virtuelle Funktion, die aufgerufen werden kann, wenn ein neues Zeichen in einen vollen Puffer eingefügt wird.

virtual int_type overflow(int_type _Meta = traits_type::eof());

Parameter

_Meta
Das Zeichen, das in den Puffer eingefügt werden soll, oder traits_type::eof.

Rückgabewert

Wenn die Funktion nicht erfolgreich ist, wird traits_type::eof zurückgegeben oder eine Ausnahme ausgelöst. Andernfalls wird traits_type::not_eof(_ Meta) zurückgegeben. Das Standardverhalten ist, traits_type::eof zurückzugeben.

Hinweise

Wenn _Meta nicht mit traits_type::eof vergleichen, versucht die geschützte virtuelle Memberfunktion, das Element traits_type::to_char_type(_Meta) in den Ausgabedatenstrom einzufügen. Hierfür gibt es verschiedene Möglichkeiten:

  • Wenn write position verfügbar ist, kann das Element in der Schreibposition gespeichert werden, und der nächste Zeiger für den Ausgabepuffer kann inkrementiert werden.

  • Eine Schreibposition kann verfügbar gemacht werden, indem neuer oder zusätzlicher Speicher für den Ausgabepuffer zugewiesen wird.

  • Eine Schreibposition kann auch dadurch verfügbar gemacht werden, dass einige oder alle Elemente zwischen dem Anfangszeiger und den folgenden Zeigern für den Ausgabepuffer an ein externes Ziel geschrieben werden.

Die virtuellen Funktionen „overflow“ sowie sync und underflow legen die Eigenschaften der von „streambuf“ abgeleiteten Klasse fest. Jede abgeleitete Klasse kann „overflow“ anders implementieren, die Schnittstelle mit der aufrufenden Streamklasse bleibt allerdings gleich.

Die Funktion overflow wird am häufigsten von öffentlichen streambuf-Funktionen, wie z.B. sputc und sputn aufgerufen, wenn der Eingabebereich voll ist. Andere Klassen, darunter Streamklassen, können overflow jederzeit aufrufen.

Die Funktion verarbeitet die Zeichen im Eingabebereich zwischen den Zeigern pbase und pptr und initialisiert anschließend den Eingabebereich erneut. Die overflow Funktion muss auch nutzen nCh (wenn nCh nicht EOF), oder es kann sich entscheiden, dieses Zeichen in den neuen Put-Bereich zu setzen, damit es für den nächsten Aufruf verwendet wird.

Die Definition von „verarbeiten“ ist abhängig von den abgeleiteten Klassen. Die Klasse filebuf schreibt z.B. ihre Zeichen in eine Datei, während die Klasse strstreambuf sie in ihrem Puffer behält, und den Puffer erweitert (wenn der Puffer als dynamisch festgelegt ist), wenn „overflow“ aufgerufen wird. Diese Erweiterung erfolgt durch Freigeben des alten Puffers und Ersetzen durch einen neuen größeren Puffer. Die Zeiger werden nach Bedarf angepasst.

basic_streambuf::p backfail

Eine geschützte virtuelle Memberfunktion, die versucht, ein Element zurück in den Eingabestream zu versetzen und es dann zum aktuellen Element zu ernennen (es wird mit dem Zeiger für das nächste Element darauf gezeigt).

virtual int_type pbackfail(int_type _Meta = traits_type::eof());

Parameter

_Meta
Das Zeichen, das in den Puffer eingefügt werden soll, oder traits_type::eof.

Rückgabewert

Wenn die Funktion nicht erfolgreich ist, wird traits_type::eof zurückgegeben oder eine Ausnahme ausgelöst. Andernfalls wird einen anderer Wert zurückgegeben. Das Standardverhalten ist, traits_type::eof zurückzugeben.

Hinweise

Wenn _Meta gleich traits_type::eof vergleicht, ist das Element, das zurückgesetzt werden soll, effektiv das Element, das sich bereits im Datenstrom befindet, vor dem aktuellen Element. Andernfalls wird dieses Element durch traits_type::to_char_type(_Meta) ersetzt. Ein Element kann auf verschiedene Arten durch die Funktion wiederhergestellt werden:

  • Wenn eine Position zur Wiederherstellung verfügbar ist, kann das Element in der Position zur Wiederherstellung gespeichert werden, und der nächste Zeiger für den Eingabepuffer kann verringert werden.

  • Eine Position zur Wiederherstellung kann verfügbar gemacht werden, indem neuer oder zusätzlicher Speicher für den Eingabepuffer zugewiesen wird.

  • Bei einem Streampuffer mit allgemeinen Eingabe- und Ausgabestreams kann eine Position zur Wiederherstellung auch dadurch verfügbar gemacht werden, dass einige oder alle Elemente zwischen dem Anfangszeiger und den folgenden Zeigern für den Ausgabepuffer an ein externes Ziel geschrieben werden.

basic_streambuf::p base

Eine geschützte Funktion, die einen Zeiger auf den Anfang des Ausgabepuffers zurückgibt.

char_type *pbase() const;

Rückgabewert

Ein Zeiger auf den Anfang des Ausgabepuffers.

basic_streambuf::p bump

Eine geschützte Funktion, die dem nächsten Zeiger für den Ausgabepuffer anzahl hinzufügt.

void pbump(int count);

Parameter

count
Die Anzahl der Zeichen, um die die Schreibposition nach vorne verschoben werden soll.

basic_streambuf::p os_type

Ordnet einen Typnamen innerhalb des Bereichs von „basic_streambuf“ einem der Typen in einem Vorlagenparameter zu.

typedef typename traits_type::pos_type pos_type;

basic_streambuf::p ptr

Eine geschützte Funktion, die einen Zeiger auf das nächste Element des Ausgabepuffers zurückgibt.

char_type *pptr() const;

Rückgabewert

Ein Zeiger auf das nächste Element des Ausgabepuffers.

basic_streambuf::p ubimbue

Legt das Gebietsschema des Objekts „basic_streambuf“ fest.

locale pubimbue(const locale& _Loc);

Parameter

_Loc
Ein Verweis auf ein Gebietsschema.

Rückgabewert

Der vorherige Wert, der im locale-Objekt gespeichert war.

Hinweise

Die Memberfunktion speichert _ Loc im locale-Objekt und ruft imbue auf.

Beispiel

Ein Beispiel, in dem pubimbue verwendet wird, finden Sie unter basic_ios::imbue.

basic_streambuf::p ubseekoff

Ruft seekoff auf, eine geschützte virtuelle Funktion, die in einer abgeleiteten Klasse überschrieben wird.

pos_type pubseekoff(off_type _Off,
    ios_base::seekdir _Way,
    ios_base::openmode _Which = ios_base::in | ios_base::out);

Parameter

_Aus
Die Position, die relativ zu _Way gesucht werden soll.

_Weg
Der Startpunkt für Offsetvorgänge. Mögliche Werte sind unter seekdir aufgeführt.

_Welche
Gibt den Modus für die Zeigerposition an. Standardmäßig können Lese- und Schreibpositionen geändert werden.

Rückgabewert

Gibt die neue Position oder eine ungültige Datenstromposition (seekoff(_ Off, _Way, _Which)) zurück.

Hinweise

Verschiebt den Mauszeiger relativ zu _Way.

basic_streambuf::p ubseekpos

Ruft seekpos auf, eine geschützte virtuelle Funktion, die in einer abgeleiteten Klasse überschrieben wird, und setzt die aktuelle Zeigerposition zurück.

pos_type pubseekpos(pos_type _Sp, ios_base::openmode _Which = ios_base::in | ios_base::out);

Parameter

_Sp
Die Position, nach der gesucht werden soll.

_Welche
Gibt den Modus für die Zeigerposition an. Standardmäßig können Lese- und Schreibpositionen geändert werden.

Rückgabewert

Die neue Position oder eine ungültige Streamposition. Vergleichen Sie den Rückgabewert mit pos_type(off_type(-1)), um festzustellen, ob die Streamposition ungültig ist.

Hinweise

Die Memberfunktion gibt seekpos(_ Sp, _Which) zurück.

basic_streambuf::p ubsetbuf

Ruft setbuf auf, eine geschützte virtuelle Funktion, die in einer abgeleiteten Klasse überschrieben wird.

basic_streambuf<Elem, Tr> *pubsetbuf(
    char_type* _Buffer,
    streamsize count);

Parameter

_Puffer
Ein Zeiger auf char_type für diese Instanziierung.

count
Die Größe des Puffers.

Rückgabewert

Gibt setbuf( _Buffer, count) zurück.

basic_streambuf::p ubsync

Ruft sync auf, eine geschützte virtuelle Funktion, die in einer abgeleiteten Klasse überschrieben wird, und aktualisiert den externen Stream für diesen Puffer.

int pubsync();

Rückgabewert

Gibt die Synchronisierung oder -1 zurück, wenn ein Fehler auftritt.

basic_streambuf::sbumpc

Liest das aktuelle Element, gibt es zurück und bewegt den Streamzeiger.

int_type sbumpc();

Rückgabewert

Das aktuelle Element.

Hinweise

Wenn eine Leseposition verfügbar ist, gibt die Memberfunktion traits_type::to_int_type(*gptr) zurück und erhöht den nächsten Zeiger für den Eingabepuffer. Andernfalls wird uflow zurückgegeben.

Beispiel

// basic_streambuf_sbumpc.cpp
// compile with: /EHsc
#include <iostream>

int main( )
{
   using namespace std;
   int i = 0;
   i = cin.rdbuf( )->sbumpc( );
   cout << i << endl;
}
3
33
51

basic_streambuf::seekoff

Eine geschützte virtuelle Memberfunktion, die versucht, die aktuellen Positionen für die gesteuerten Streams zu ändern.

virtual pos_type seekoff(
    off_type _Off,
    ios_base::seekdir _Way,
    ios_base::openmode _Which = ios_base::in | ios_base::out);

Parameter

_Aus
Die Position, die relativ zu _Way gesucht werden soll.

_Weg
Der Startpunkt für Offsetvorgänge. Mögliche Werte sind unter seekdir aufgeführt.

_Welche
Gibt den Modus für die Zeigerposition an. Standardmäßig können Lese- und Schreibpositionen geändert werden.

Rückgabewert

Gibt die neue Position oder eine ungültige Datenstromposition zurück ( (seekoff _ Aus, _Way, _Which)).

Hinweise

Die neue Position wird wie folgt bestimmt:

  • Bei _Way == ios_base::beg ist die neue Position der Anfang des Streams plus _ Off.

  • Bei _Way == ios_base::cur ist die neue Position die aktuelle Streamposition plus _ Off.

  • Bei _Way == ios_base::end ist die neue Position das Ende des Streams plus _ Off.

In der Regel ist der Eingabestream betroffen, wenn which & ios_base::in ungleich null ist. Der Ausgabestream ist betroffen, wenn which & ios_base::out ungleich null ist. Die tatsächliche Verwendung dieses Parameters ist allerdings bei verschiedenen abgeleiteten Streampuffern unabhängig.

Wenn die Funktion erfolgreich die Streamposition oder -positionen verändert, gibt sie die resultierende Streamposition oder eine der resultierenden Streampositionen zurück. Andernfalls gibt sie eine ungültige Streamposition zurück. Standardmäßig wird eine ungültige Streamposition zurückgegeben.

basic_streambuf::seekpos

Eine geschützte virtuelle Memberfunktion, die versucht, die aktuellen Positionen für die gesteuerten Streams zu ändern.

virtual pos_type seekpos(pos_type _Sp, ios_base::openmode _Which = ios_base::in | ios_base::out);

Parameter

_Sp
Die Position, nach der gesucht werden soll.

_Welche
Gibt den Modus für die Zeigerposition an. Standardmäßig können Lese- und Schreibpositionen geändert werden.

Rückgabewert

Die neue Position oder eine ungültige Streamposition. Vergleichen Sie den Rückgabewert mit pos_type(off_type(-1)), um festzustellen, ob die Streamposition ungültig ist.

Hinweise

Die neue Position ist _ Sp.

In der Regel ist der Eingabestream betroffen, wenn which & ios_base::in ungleich null ist. Der Ausgabestream ist betroffen, wenn which & ios_base::out ungleich null ist. Die tatsächliche Verwendung dieses Parameters ist allerdings bei verschiedenen abgeleiteten Streampuffern unabhängig.

Wenn die Funktion erfolgreich die Streamposition oder -positionen verändert, gibt sie die resultierende Streamposition oder eine der resultierenden Streampositionen zurück. Andernfalls gibt sie eine ungültige Streamposition zurück (-1). Standardmäßig wird eine ungültige Streamposition zurückgegeben.

basic_streambuf::setbuf

Eine geschützte virtuelle Memberfunktion, die für jeden abgeleiteten Streampuffer einen bestimmten Vorgang ausführt.

virtual basic_streambuf<Elem, Tr> *setbuf(
    char_type* _Buffer,
    streamsize count);

Parameter

_Puffer
Ein Zeiger auf einen Puffer.

count
Größe des Puffers.

Rückgabewert

Standardmäßig wird this zurückgegeben.

Hinweise

Siehe basic_filebuf. setbuf stellt einen Speicherplatzbereich für die Nutzung durch das streambuf-Objekt zur Verfügung. Wie der Puffer verwendet wird, ist in den abgeleiteten Klassen festgelegt.

basic_streambuf::setg

Eine geschützte Funktion, die Gbeg im Startzeiger, _Gnext im nächsten Zeiger und _Gend im Endzeiger für den Eingabepuffer speichert.

void setg(char_type* _Gbeg,
    char_type* _Gnext,
    char_type* _Gend);

Parameter

_Gbeg
Ein Zeiger auf den Anfang des Puffers.

_Gnext
Ein Zeiger auf eine Position in der Mitte des Puffers.

_Gend
Ein Zeiger auf das Ende des Puffers.

basic_streambuf::setp

Eine geschützte Funktion, die _Pbeg im Anfangszeiger speichert und im Endzeiger für den Ausgabepuffer _Pend.

void setp(char_type* _Pbeg, char_type* _Pend);

Parameter

_Pbeg
Ein Zeiger auf den Anfang des Puffers.

_Pend
Ein Zeiger auf das Ende des Puffers.

basic_streambuf::sgetc

Gibt das aktuelle Element ohne Änderung der Position im Stream zurück.

int_type sgetc();

Rückgabewert

Das aktuelle Element.

Hinweise

Wenn eine Leseposition verfügbar ist, gibt die Memberfunktion traits_type::to_int_type( *gptr) zurück. Andernfalls wird underflow zurückgegeben.

Beispiel

// basic_streambuf_sgetc.cpp
// compile with: /EHsc
#include <iostream>
#include <fstream>

int main( )
{
   using namespace std;
   ifstream myfile( "basic_streambuf_sgetc.txt", ios::in );

   char i = myfile.rdbuf( )->sgetc( );
   cout << i << endl;
   i = myfile.rdbuf( )->sgetc( );
   cout << i << endl;
}

basic_streambuf::sgetn

Extrahiert bis zur Anzahl von Zeichen aus dem Eingabepuffer und speichert sie im bereitgestellten Puffer ptr.

Diese Methode ist potenziell unsicher, da sie darauf basiert, dass der Aufrufer überprüft, ob die übergebenen Werte korrekt sind.

streamsize sgetn(
    char_type* ptr,
    streamsize count);

Parameter

ptr
Der Puffer, der die extrahierten Zeichen enthalten soll.

count
Die Anzahl der zu lesenden Elemente.

Rückgabewert

Die Anzahl der gelesenen Elemente. Weitere Informationen finden Sie unter Streamsize für weitere Informationen.

Hinweise

Die Memberfunktion gibt xsgetn( ptr, count) zurück.

Beispiel

// basic_streambuf_sgetn.cpp
// compile with: /EHsc /W3
#include <iostream>
#include <fstream>

int main()
{
    using namespace std;

    ifstream myfile("basic_streambuf_sgetn.txt", ios::in);
    char a[10];

    // Extract 3 characters from myfile and store them in a.
    streamsize i = myfile.rdbuf()->sgetn(&a[0], 3);  // C4996
    a[i] = myfile.widen('\0');

    // Display the size and contents of the buffer passed to sgetn.
    cout << i << " " << a << endl;

    // Display the contents of the original input buffer.
    cout << myfile.rdbuf() << endl;
}

basic_streambuf::showmanyc

Eine geschützte virtuelle Memberfunktion, die die Anzahl der Zeichen zurückgibt, die aus dem Eingabedatenstrom extrahiert werden können, und stellen Sie sicher, dass das Programm nicht einer unbegrenzten Wartezeit unterliegt.

virtual streamsize showmanyc();

Rückgabewert

Standardmäßig wird null zurückgegeben.

basic_streambuf::snextc

Liest das aktuelle Element und gibt das folgende Element zurück.

int_type snextc();

Rückgabewert

Das nächste Element im Stream.

Hinweise

Die Memberfunktion ruft sbumpc auf, und gibt traits_type::eof zurück, wenn diese Funktion traits_type::eof zurückgibt. Andernfalls wird sgetc zurückgegeben.

Beispiel

// basic_streambuf_snextc.cpp
// compile with: /EHsc
#include <iostream>
int main( )
{
   using namespace std;
   int i = 0;
   i = cin.rdbuf( )->snextc( );
   // cout << ( int )char_traits<char>::eof << endl;
   cout << i << endl;
}
aa
aa97

basic_streambuf::sputbackc

Fügt char_type in den Stream ein.

int_type sputbackc(char_type _Ch);

Parameter

_Ch
Das Zeichen.

Rückgabewert

Gibt das Zeichen oder einen Fehler zurück.

Hinweise

Wenn eine Putbackposition verfügbar ist und _Ch gleich dem in dieser Position gespeicherten Zeichen vergleicht, erhöht die Memberfunktion den nächsten Zeiger für den Eingabepuffer und gibt traits_type::to_int_type( ) zurück. _Ch Andernfalls wird pbackfail( _Ch) zurückgegeben.

Beispiel

// basic_streambuf_sputbackc.cpp
// compile with: /EHsc
#include <iostream>
#include <fstream>

int main( )
{
    using namespace std;

    ifstream myfile("basic_streambuf_sputbackc.txt",
        ios::in);

    int i = myfile.rdbuf()->sbumpc();
    cout << (char)i << endl;
    int j = myfile.rdbuf()->sputbackc('z');
    if (j == 'z')
    {
        cout << "it worked" << endl;
    }
    i = myfile.rdbuf()->sgetc();
    cout << (char)i << endl;
}

basic_streambuf::sputc

Setzt ein Zeichen in den Stream.

int_type sputc(char_type _Ch);

Parameter

_Ch
Das Zeichen.

Rückgabewert

Gibt das Zeichen zurück, falls erfolgreich.

Hinweise

Wenn ein write position Element verfügbar ist, speichert die Memberfunktion _Ch in der Schreibposition, erhöht den nächsten Zeiger für den Ausgabepuffer und gibt traits_type::to_int_type( _Ch) zurück. Andernfalls wird overflow( _Ch) zurückgegeben.

Beispiel

// basic_streambuf_sputc.cpp
// compile with: /EHsc
#include <iostream>
#include <fstream>

int main( )
{
   using namespace std;

   int i = cout.rdbuf( )->sputc( 'a' );
   cout << endl << ( char )i << endl;
}
a
a

basic_streambuf::sputn

Setzt eine Zeichenfolge in den Stream.

streamsize sputn(const char_type* ptr, streamsize count);

Parameter

ptr
Die Zeichenfolge.

count
Die Anzahl der Zeichen.

Rückgabewert

Die Anzahl der in den Datenstrom eingefügten Zeichen.

Hinweise

Die Memberfunktion gibt xsputn( ptr, count) zurück. Weitere Informationen finden Sie im Abschnitt "Anmerkungen" dieses Mitglieds, um weitere Informationen zu finden.

Beispiel

// basic_streambuf_sputn.cpp
// compile with: /EHsc
#include <iostream>
#include <fstream>

int main()
{
    using namespace std;

    streamsize i = cout.rdbuf()->sputn("test", 4);
    cout << endl << i << endl;
}
test
4

basic_streambuf::stoßc

Verschiebt den Zeiger hinter das aktuelle Element im Stream.

void stossc();

Hinweise

Die Memberfunktion ruft sbumpc auf. Eine Implementierung ist nicht erforderlich, um diese Memberfunktion bereitzustellen.

Beispiel

// basic_streambuf_stossc.cpp
// compile with: /EHsc
#include <iostream>
#include <fstream>

int main( )
{
   using namespace std;
   ifstream myfile( "basic_streambuf_stossc.txt", ios::in );

   myfile.rdbuf( )->stossc( );
   char i = myfile.rdbuf( )->sgetc( );
   cout << i << endl;
}

basic_streambuf::sungetc

Ruft ein Zeichen aus dem Stream ab.

int_type sungetc();

Rückgabewert

Gibt entweder das Zeichen oder einen Fehler zurück.

Hinweise

Wenn eine Position zur Wiederherstellung verfügbar ist, erhöht die Memberfunktion den nächsten Zeiger für den Eingabespeicher, und gibt traits_type::to_int_type( *gptr) zurück. Es ist jedoch nicht immer möglich, das letzte Gelesene zu bestimmen, damit es im Zustand des aktuellen Puffers erfasst werden kann. Wenn dies zutrifft, gibt die Funktion pbackfail zurück. Um diese Situation zu vermeiden, verfolgen Sie das Zeichen, das zurückgesetzt und aufgerufen sputbackc(ch)werden soll, was nicht fehlschlägt, vorausgesetzt, Sie rufen es nicht am Anfang des Datenstroms auf, und Sie versuchen nicht, mehr als ein Zeichen zurückzusetzen.

Beispiel

// basic_streambuf_sungetc.cpp
// compile with: /EHsc
#include <iostream>
#include <fstream>

int main( )
{
   using namespace std;

   ifstream myfile( "basic_streambuf_sungetc.txt", ios::in );

   // Read and increment
   int i = myfile.rdbuf( )->sbumpc( );
   cout << ( char )i << endl;

   // Read and increment
   i = myfile.rdbuf( )->sbumpc( );
   cout << ( char )i << endl;

   // Decrement, read, and do not increment
   i = myfile.rdbuf( )->sungetc( );
   cout << ( char )i << endl;

   i = myfile.rdbuf( )->sungetc( );
   cout << ( char )i << endl;

   i = myfile.rdbuf( )->sbumpc( );
   cout << ( char )i << endl;
}

basic_streambuf::swap

Tauscht die Werte in diesem Objekt gegen die Werte im bereitgestellten basic_streambuf-Objekt aus.

void swap(basic_streambuf& right);

Parameter

right
Einen lvalue-Verweis auf das basic_streambuf-Objekt, das zum Austauschen von Werten verwendet wird.

Hinweise

Die geschützte Memberfunktion wechselt mit den richtigen Zeigern, die die input buffer und die .output buffer Außerdem tauscht sie right.getloc() mit dem locale-Objekt aus.

basic_streambuf::sync

Eine geschützte virtuelle Funktion, die versucht, die gesteuerten Streams mit zugehörigen externen Streams zu synchronisieren.

virtual int sync();

Rückgabewert

Wenn die Funktion nicht erfolgreich ist, wird -1 zurückgegeben. Standardmäßig wird null zurückgegeben.

Hinweise

sync umfasst das Schreiben von Elementen zwischen dem Anfang und den nächsten Zeigern für den Ausgabepuffer. Es umfasst nicht das Einfügen von Elementen zwischen den nächsten und den Endzeigern für den Eingabepuffer.

basic_streambuf::traits_type

Verknüpft einen Typnamen mit dem Vorlagenparameter Tr.

typedef Tr traits_type;

basic_streambuf::uflow

Eine geschützte virtuelle Funktion, die das aktuelle Element aus dem Eingabestream extrahiert.

virtual int_type uflow();

Rückgabewert

Das aktuelle Element.

Hinweise

Die geschützte virtuelle Memberfunktion versucht, das aktuelle Element ch aus dem Eingabestream zu extrahieren, anschließend die aktuelle Streamposition nach vorne zu verschieben, und das Element als traits_type::to_int_type( ch) zurückzugeben. Hierfür gibt es verschiedene Möglichkeiten:

  • Wenn eine Leseposition verfügbar ist, wird ch als das in der Leseposition gespeicherte Element verwendet, und der nächste Zeiger für den Eingabepuffer wird nach vorne verschoben.

  • Ein Element kann auch direkt aus einer externen Quelle gelesen und als Wert ch bereitgestellt werden.

  • Bei einem Streampuffer mit allgemeinen Eingabe- und Ausgabestreams kann eine Leseposition auch dadurch verfügbar gemacht werden, dass einige oder alle Elemente zwischen dem Anfangszeiger und den folgenden Zeigern für den Ausgabepuffer an ein externes Ziel geschrieben werden. Andernfalls kann neuer oder zusätzlicher Speicher für den Eingabepuffer zugewiesen werden. Die Funktion liest dann aus einer externen Quelle oder aus einem oder mehreren Elementen ein.

Wenn die Funktion nicht erfolgreich ist, wird traits_type::eof zurückgegeben oder eine Ausnahme ausgelöst. Andernfalls gibt sie das aktuelle ch-Element in den Eingabestream zurück, das wie oben beschrieben konvertiert wurde, und verschiebt den nächsten Zeiger für den Eingabepuffer nach vorne. Standardmäßig wird underflow aufgerufen, wenn diese Funktion traits_type::eof zurückgibt, um traits_type::eof zurückzugeben. Andernfalls gibt die Funktion das aktuelle ch-Element in den Eingabestream zurück, das wie vorhin beschrieben konvertiert wurde, und verschiebt den nächsten Zeiger für den Eingabepuffer nach vorne.

basic_streambuf::underflow

Die geschützte virtuelle Funktion versucht, das aktuelle Element aus dem Eingabestream zu extrahieren.

virtual int_type underflow();

Rückgabewert

Das aktuelle Element.

Hinweise

Die geschützte virtuelle Memberfunktion versucht, das aktuelle Element ch aus dem Eingabestream zu extrahieren, ohne die aktuelle Streamposition nach vorne zu verschieben und das Element als traits_type::to_int_type( ch) zurückzugeben. Hierfür gibt es verschiedene Möglichkeiten:

  • Wenn eine Leseposition verfügbar ist, ist ch das Element, das in der Leseposition gespeichert wird. Weitere Informationen finden Sie im Abschnitt „Hinweise“ unter basic_streambuf-Klasse.

  • Eine Leseposition kann verfügbar gemacht werden, indem die Funktion neuen oder zusätzlichen Speicher für den Eingabepuffer zuweist und anschließend aus einer externen Quelle oder einem oder mehreren Elementen einliest. Weitere Informationen finden Sie im Abschnitt „Hinweise“ unter basic_streambuf-Klasse.

Wenn die Funktion nicht erfolgreich ist, wird eine Ausnahme zurückgegeben traits_type::() oder ausgelöst. Andernfalls wird das aktuelle Element konvertiert, wie zuvor beschrieben, in den Eingabestream zurückgegeben. Standardmäßig wird traits_type::eof() zurückgegeben.

Die virtuellen Funktionen underflow mit sync und overflow legen die Eigenschaften der von streambuf abgeleiteten Klasse fest. Jede abgeleitete Klasse kann underflow anders implementieren, die Schnittstelle mit der aufrufenden Stream-Klasse bleibt allerdings gleich.

Die underflow-Funktion wird am häufigsten von öffentlichen streambuf-Funktionen, wie z.B. sgetc und sgetn aufgerufen, wenn der Abrufbereich leer ist. Andere Klassen, darunter stream-Klassen, können underflow jederzeit aufrufen.

Die Funktion underflow stellt dem Abrufbereich Zeichen aus der Eingabequelle bereit. Wenn der Abrufbereich Zeichen enthält, gibt underflow das erste Zeichen zurück. Wenn der Abrufbereich leer ist, füllt die Funktion den Abrufbereich und gibt das folgende Zeichen zurück (welches von der Funktion im Abrufbereich gelassen wird). Wenn keine weiteren Zeichen verfügbar sind, gibt underflowEOF zurück und lässt den Abrufbereich leer.

In der strstreambuf-Klasse passt underflow den egptr-Zeiger an, um auf den Speicher zuzugreifen, der dynamisch durch einen Aufruf an overflow zugewiesen wurde.

basic_streambuf::xsgetn

Eine geschützte virtuelle Funktion, um Elemente aus dem Eingabestream zu extrahieren.

Diese Methode ist potenziell unsicher, da sie darauf basiert, dass der Aufrufer überprüft, ob die übergebenen Werte korrekt sind.

virtual streamsize xsgetn(
    char_type* ptr,
    streamsize count);

Parameter

ptr
Der Puffer, der die extrahierten Zeichen enthalten soll.

count
Die Anzahl der zu extrahierenden Elemente.

Rückgabewert

Die Anzahl der extrahierten Elemente.

Hinweise

Die geschützte virtuelle Memberfunktion extrahiert die Anzahl der Elemente aus dem Eingabedatenstrom, als ob wiederholte Aufrufe an sbumpc ausgeführt werden, und speichert sie in dem Array ab ptr. Sie gibt die Anzahl der extrahierten Elemente zurück.

basic_streambuf::xsputn

Eine geschützte virtuelle Funktion, mit der Elemente in den Ausgabestream einfügt werden können.

virtual streamsize xsputn(const char_type* ptr, streamsize count);

Parameter

ptr
Zeiger auf die einzufügenden Elemente.

count
Die Anzahl einzufügender Elemente.

Rückgabewert

Die Anzahl der elemente, die in den Datenstrom eingefügt wurden.

Hinweise

Die geschützte virtuelle Memberfunktion fügt bis zu zählendeElemente in den Ausgabedatenstrom ein, als wäre es durch wiederholte Aufrufe von Sputc vom Array beginnend bei ptr. Das Einfügen von Zeichen in den Ausgabedatenstrom wird beendet, sobald alle Anzahlzeichen geschrieben wurden, oder wenn der Aufruf sputc( count) zurückgegeben traits::eof()würde. Es gibt die Anzahl der eingefügten Elemente zurück.

Siehe auch

Threadsicherheit in der C++-Standardbibliothek
iostream-Programmierung
iostreams-Konventionen