Namespaces
Variants

std::strstreambuf:: seekpos

From cppreference.net
protected :

virtual pos_type seekpos ( pos_type sp,
std:: ios_base :: openmode which =

std:: ios_base :: in | std:: ios_base :: out ) ;
(in C++98 veraltet)
(in C++26 entfernt)

Positioniert std::basic_streambuf::gptr und/oder std::basic_streambuf::pptr , falls möglich, an die durch sp angegebene Position.

Wenn std::ios_base::in in which gesetzt ist, wird versucht, gptr() (den nächsten Zeiger im Lesebereich) neu zu positionieren. Wenn std::ios_base::out in which gesetzt ist, wird versucht, pptr() (den nächsten Zeiger im Schreibbereich) neu zu positionieren. Wenn kein Bit in which gesetzt ist, schlägt der Vorgang fehl.

Jeder nächste Zeiger wird wie folgt neu positioniert:

  • Wenn der nächste Zeiger null ist, schlägt der Vorgang fehl.
  • Andernfalls wird der neue Offset newoff (vom Typ off_type ) durch Aufruf von sp. offset ( ) bestimmt. Wenn newoff negativ ist, außerhalb der Puffergrenzen liegt oder ungültig ist, schlägt der Vorgang fehl.
  • Andernfalls wird der nächste Zeiger zugewiesen, als ob durch gptr ( ) = eback ( ) + newoff oder pptr ( ) = pbase ( ) + newoff .

Inhaltsverzeichnis

Parameter

sp - Stream-Position, wie sie beispielsweise durch seekoff() oder seekpos() erhalten wird
which - definiert, ob die Eingabesequenz, die Ausgabesequenz oder beide betroffen sind. Es kann eine oder eine Kombination der folgenden Konstanten sein:
Konstante Erklärung
in beeinflusst die Eingabesequenz
out beeinflusst die Ausgabesequenz

Rückgabewert

Der resultierende Offset, bei Erfolg umgewandelt in pos_type oder bei Misserfolg in pos_type ( off_type ( - 1 ) ) .

Hinweise

seekpos() wird aufgerufen von std::basic_streambuf::pubseekpos() , welches aufgerufen wird von den Einzelargument-Versionen von std::basic_istream::seekg() und std::basic_ostream::seekp() .

Beispiel

#include <cstring>
#include <iostream>
#include <strstream>
struct mybuf : std::strstreambuf
{
    mybuf(const char* str) : std::strstreambuf(str, std::strlen(str)) {}
    pos_type seekpos(pos_type sp, std::ios_base::openmode which)
    {
        std::cout << "Before seekpos(" << sp << "), size of the get area is "
                  << egptr() - eback() << " with "
                  << egptr() - gptr() << " read positions available.\n";
        pos_type rc = std::strstreambuf::seekpos(sp, which);
        std::cout << "seekpos() returns " << rc << ".\nAfter the call, "
                  << "size of the get area is "
                  << egptr() - eback() << " with "
                  << egptr() - gptr() << " read positions available.\n";
        return rc;
    }
};
int main()
{
    mybuf buf("12345");
    std::iostream stream(&buf);
    stream.seekg(2);
}

Ausgabe:

Before seekpos(2), size of the get area is 5 with 5 read positions available.
seekpos() returns 2.
After the call, size of the get area is 5 with 3 read positions available.

Fehlerberichte

Die folgenden verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.

DR Angewendet auf Verhalten wie veröffentlicht Korrektes Verhalten
LWG 55 C++98 seekpos lieferte eine undefinierte
ungültige Stream-Position bei Fehler
pos_type ( off_type ( - 1 ) )
wird bei Fehler zurückgegeben

Siehe auch

[virtual]
positioniert den nächsten Zeiger in der Eingabesequenz, Ausgabesequenz oder beiden neu, unter Verwendung relativer Adressierung
(virtuelle geschützte Elementfunktion)
[virtual]
positioniert den nächsten Zeiger in der Eingabesequenz, Ausgabesequenz oder beiden neu, unter Verwendung absoluter Adressierung
(virtuelle geschützte Elementfunktion von std::basic_streambuf<CharT,Traits> )
[virtual]
positioniert den nächsten Zeiger in der Eingabesequenz, Ausgabesequenz oder beiden neu, unter Verwendung absoluter Adressierung
(virtuelle geschützte Elementfunktion von std::basic_stringbuf<CharT,Traits,Allocator> )
[virtual]
positioniert die Dateiposition neu, unter Verwendung absoluter Adressierung
(virtuelle geschützte Elementfunktion von std::basic_filebuf<CharT,Traits> )