I/O manipulators | ||||
Print functions(C++23) | ||||
C-style I/O | ||||
Buffers | ||||
(C++23) | ||||
(C++98/26*) | ||||
(C++20) | ||||
Streams | ||||
Abstractions | ||||
File I/O | ||||
String I/O | ||||
Array I/O | ||||
(C++23) | ||||
(C++23) | ||||
(C++23) | ||||
(C++98/26*) | ||||
(C++98/26*) | ||||
(C++98/26*) | ||||
Synchronized Output | ||||
(C++20) | ||||
Types | ||||
Error category interface | ||||
(C++11) | ||||
(C++11) |
Public member functions | ||||
(C++11) | ||||
(C++11) | ||||
(C++20) | ||||
Protected member functions | ||||
basic_stringbuf::seekpos | ||||
Non-member functions | ||||
(C++11) | ||||
Exposition-only member functions | ||||
protected: virtual pos_type seekpos( pos_type sp, | ||
Repositionsstd::basic_streambuf::gptr and/orstd::basic_streambuf::pptr, if possible, to the position indicated bysp.
Effectively executesseekoff(off_type(sp),std::ios_base::beg, which).
Contents |
sp | - | stream position, such as one obtained byseekoff() orseekpos() | ||||||
which | - | defines whether the input sequences, the output sequence, or both are affected. It can be one or a combination of the following constants:
|
sp on success orpos_type(off_type(-1)) on failure.
seekpos()
is called bystd::basic_streambuf::pubseekpos(), which is called by the single-argument versions ofstd::basic_istream::seekg() andstd::basic_ostream::seekp().
#include <sstream>#include <iostream> struct mybuf:std::stringbuf{ mybuf(conststd::string& str):std::stringbuf(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::stringbuf::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);}
Output:
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.
The following behavior-changing defect reports were applied retroactively to previously published C++ standards.
DR | Applied to | Behavior as published | Correct behavior |
---|---|---|---|
LWG 375 | C++98 | static constant members ofstd::ios_base were misspecified as members ofstd::basic_ios | corrected |
LWG 564 | C++98 | if was unclear how to repositiongptr and/orpptr | they are repositioned byseekoff() |
invokesseekpos() (public member function of std::basic_streambuf<CharT,Traits> )[edit] | |
[virtual] | repositions the next pointer in the input sequence, output sequence, or both, using relative addressing (virtual protected member function)[edit] |
[virtual] | repositions the file position, using absolute addressing (virtual protected member function of std::basic_filebuf<CharT,Traits> )[edit] |
[virtual] | repositions the next pointer in the input sequence, output sequence, or both using absolute addressing (virtual protected member function of std::strstreambuf )[edit] |