public member function
<streambuf> <iostream>
streampos pubseekoff (streamoff off, ios_base::seekdir way, ios_base::openmode which = ios_base::in | ios_base::out);
Set internal position pointer to relative position
Calls the protected virtual member seekoff with the same arguments off, way and which.
Member seekoff does nothing in streambuf but derived classes shall override this behavior to alter the internal pointers appropriately: both filebuf and stringbuf override this virtual member function to set the internal pointer specified by which to a position offset off relative to the direction specified by way.
Parameters
- off
- Offset value, relative to the way parameter.
streamoff is an offset type (generally, a signed integral type).
- way
- Object of type ios_base::seekdir. It may take any of the following constant values:
value | offset is relative to... |
ios_base::beg | beginning of the stream buffer |
ios_base::cur | current position in the stream buffer |
ios_base::end | end of the stream buffer |
- which
- Generally used to determine the position on which of the controlled sequences shall be modified: the input sequence, the output sequence, or both. It is an object of type ios_base::openmode that, for this function, may take any combination of the following significant constant values:
value | position pointer affected |
ios_base::in | Modify current position in controlled input sequence |
ios_base::out | Modify current position in controlled output sequence |
Return Value
The new position value of the modified position pointer.
The default definition in streambuf always returns -1
.
streampos is a positioning type that can be converted to/from integral types (an fpos type).
Example
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
// get file size using pubseekoff
#include <iostream> // std::cout, std::streambuf
#include <fstream> // std::fstream
int main () {
std::fstream filestr ("test.txt");
if (filestr) {
std::streambuf* pbuf = filestr.rdbuf();
long size = pbuf->pubseekoff(0,filestr.end);
std::cout << "The file size is " << size << " characters.\n";
filestr.close();
}
return 0;
}
|
This program prints the size of file test.txt
using the value returned by pubseekoff when it repositions the position pointer to the end of the file buffer.
Data races
Modifies the stream buffer object.
Concurrent access to the same stream buffer object may introduce data races.
Exception safety
Basic guarantee: if an exception is thrown, the stream buffer is in a valid state (this also applies to standard derived classes).
See also
- streambuf::pubseekpos
- Set internal position pointer to absolute position (public member function)
- streambuf::seekoff
- Set internal position pointer to relative position (protected virtual member function)
- filebuf::seekoff
- Set internal position to relative position (protected virtual member function)
- stringbuf::seekoff
- Set position pointer to relative position (protected virtual member function)