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 basic_streambuf
<Elem
Sie für eine von einer Klasse abgeleitete Klasse schreiben, Tr
> müssen bei der Aufrechterhaltung dieses Protokolls zusammenarbeiten.
Ein Objekt der Klasse basic_streambuf
<Elem
speichert 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 underflow
EOF
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ählende Elemente 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