
- C++ Library - Home
- C++ Library - <fstream>
- C++ Library - <iomanip>
- C++ Library - <ios>
- C++ Library - <iosfwd>
- C++ Library - <iostream>
- C++ Library - <istream>
- C++ Library - <ostream>
- C++ Library - <sstream>
- C++ Library - <streambuf>
- C++ Library - <atomic>
- C++ Library - <complex>
- C++ Library - <exception>
- C++ Library - <functional>
- C++ Library - <limits>
- C++ Library - <locale>
- C++ Library - <memory>
- C++ Library - <new>
- C++ Library - <numeric>
- C++ Library - <regex>
- C++ Library - <stdexcept>
- C++ Library - <string>
- C++ Library - <thread>
- C++ Library - <tuple>
- C++ Library - <typeinfo>
- C++ Library - <utility>
- C++ Library - <valarray>
- The C++ STL Library
- C++ Library - <array>
- C++ Library - <bitset>
- C++ Library - <deque>
- C++ Library - <forward_list>
- C++ Library - <list>
- C++ Library - <map>
- C++ Library - <multimap>
- C++ Library - <queue>
- C++ Library - <priority_queue>
- C++ Library - <set>
- C++ Library - <stack>
- C++ Library - <unordered_map>
- C++ Library - <unordered_set>
- C++ Library - <vector>
- C++ Library - <algorithm>
- C++ Library - <iterator>
- The C++ Advanced Library
- C++ Library - <any>
- C++ Library - <barrier>
- C++ Library - <bit>
- C++ Library - <chrono>
- C++ Library - <cinttypes>
- C++ Library - <clocale>
- C++ Library - <condition_variable>
- C++ Library - <coroutine>
- C++ Library - <cstdlib>
- C++ Library - <cstring>
- C++ Library - <cuchar>
- C++ Library - <charconv>
- C++ Library - <cfenv>
- C++ Library - <cmath>
- C++ Library - <ccomplex>
- C++ Library - <expected>
- C++ Library - <format>
- C++ Library - <future>
- C++ Library - <flat_set>
- C++ Library - <flat_map>
- C++ Library - <filesystem>
- C++ Library - <generator>
- C++ Library - <initializer_list>
- C++ Library - <latch>
- C++ Library - <memory_resource>
- C++ Library - <mutex>
- C++ Library - <mdspan>
- C++ Library - <optional>
- C++ Library - <print>
- C++ Library - <ratio>
- C++ Library - <scoped_allocator>
- C++ Library - <semaphore>
- C++ Library - <source_location>
- C++ Library - <span>
- C++ Library - <spanstream>
- C++ Library - <stacktrace>
- C++ Library - <stop_token>
- C++ Library - <syncstream>
- C++ Library - <system_error>
- C++ Library - <string_view>
- C++ Library - <stdatomic>
- C++ Library - <variant>
- C++ STL Library Cheat Sheet
- C++ STL - Cheat Sheet
- C++ Programming Resources
- C++ Programming Tutorial
- C++ Useful Resources
- C++ Discussion
C++ streambuf::pubseekoff() function
The C++ std::streambuf::pubseekoff() function is used for seeking the specific position within a stream. It allows for repositioning the streams internal pointer relative to a given offset, which can be specified as an absolute or relative position.
This function returns the new position of the stream if successful, or std::streampos(-1) if an error occurred.
Syntax
Following is the syntax for std::streambuf::pubseekoff() function.
pos_type pubseekoff (off_type off, ios_base::seekdir way, ios_base::openmode which = ios_base::in | ios_base::out);
Parameters
- off − It indicates the offset value.
- way − It indicates the object of type ios_base::seekdir.
- which − It is generally used to determine the position on which of the controlled sequence shall be modified.
Return Value
This function returns the new position value of the modified position pointer.
Exceptions
If an exception is thrown, the stream buffer is in a valid state.
Data races
It modifies the stream buffer object.
Example 1
Let's look at the following example, where we are going to seek to the beginning of the stream.
#include <iostream> #include <sstream> int main() { std::stringstream a("WELCOME"); std::streambuf * b = a.rdbuf(); b -> pubseekoff(0, std::ios::beg); std::cout << static_cast < char > (b -> sgetc()) << std::endl; return 0; }
Output
Output of the above code is as follows −
W
Example 2
Consider the following example, where we are going to move the position 8 characters backward from the end and inserting welcome.
#include <iostream> #include <sstream> int main() { std::ostringstream a; a.str("Vanakam to TutorialsPoint"); a.rdbuf() -> pubseekoff(-8, std::ios::end); a << "Welcome "; std::cout << "Result : " << a.str() << std::endl; return 0; }
Output
Following is the output of the above code −
Result : Welcome to TutorialsPoint
Example 3
In the following example, we are going to seek the position beyond the stream length and observing the output.
#include <iostream> #include <sstream> int main() { std::stringstream a("Hi"); std::streambuf * b = a.rdbuf(); std::streampos c = b -> pubseekoff(5, std::ios::beg); if (c == std::streampos(-1)) { std::cout << "Invalid" << std::endl; } else { std::cout << "Result : " << c << std::endl; } return 0; }
Output
If we run the above code it will generate the following output −
Invalid