std::strstreambuf:: seekoff
|
protected
:
virtual
pos_type seekoff
(
off_type off,
|
(устарело в C++98)
(удалено в C++26) |
|
Перемещает std::basic_streambuf::gptr и/или std::basic_streambuf::pptr , если возможно, в позицию, соответствующую ровно off символам от начала, конца или текущей позиции области чтения и/или записи буфера.
- Если which включает ios_base :: in и этот буфер открыт для чтения, то перемещает указатель чтения std::basic_streambuf::gptr внутри области получения, как описано ниже.
- Если which включает ios_base :: out и этот буфер открыт для записи, то перемещает указатель записи std::basic_streambuf::pptr внутри области размещения, как описано ниже.
-
Если
which
включает как
ios_base
::
in
так и
ios_base::out, буфер открыт и для чтения, и для записи, а way равен либо ios_base :: beg либо ios_base :: end , то перемещает оба указателя (чтения и записи), как описано ниже. - В противном случае функция завершается неудачно.
Если указатель (либо
gptr
, либо
pptr
, либо оба) перемещается, это выполняется следующим образом:
off_type
определяется
Содержание |
Параметры
| off | - | относительное положение для установки следующего указателя(ей) | ||||||||
| way | - |
определяет базовую позицию для применения относительного смещения. Может быть одной из следующих констант:
|
||||||||
| which | - |
определяет, влияет ли на входную последовательность, выходную последовательность или на обе. Может быть одной или комбинацией следующих констант:
|
Возвращаемое значение
pos_type ( newoff ) при успехе, pos_type ( off_type ( - 1 ) ) при неудаче и если pos_type не может представить результирующую позицию в потоке.
Пример
#include <iostream> #include <strstream> int main() { char a[] = "123"; std::strstream ss(a, sizeof a); // ввод/вывод std::cout << "позиция записи = " << ss.tellp() << " позиция чтения = " << ss.tellg() << '\n'; // абсолютное позиционирование обоих указателей ss.rdbuf()->pubseekoff(1, std::ios_base::beg); // переместить оба вперед std::cout << "позиция записи = " << ss.tellp() << " позиция чтения = " << ss.tellg() << '\n'; // попытка переместить оба указателя на 1 вперед от текущей позиции if (-1 == ss.rdbuf()->pubseekoff(1, std::ios_base::cur)) std::cout << "перемещение обоих указателей из текущей позиции не удалось\n"; std::cout << "позиция записи = " << ss.tellp() << " позиция чтения = " << ss.tellg() << '\n'; // переместить указатель записи на 1 вперед, но не указатель чтения // также может быть вызвано как ss.seekp(1, std::ios_base::cur); ss.rdbuf()->pubseekoff(1, std::ios_base::cur, std::ios_base::out); std::cout << "позиция записи = " << ss.tellp() << " позиция чтения = " << ss.tellg() << '\n'; ss << 'a'; // запись в позиции записи std::cout << "Записано 'a' в позиции записи, буфер теперь: '"; std::cout.write(a, sizeof a); std::cout << "'\n"; char ch; ss >> ch; std::cout << "чтение в позиции чтения дает '" << ch << "'\n"; }
Вывод:
позиция записи = 0 позиция чтения = 0 позиция записи = 1 позиция чтения = 1 перемещение обоих указателей из текущей позиции не удалось позиция записи = 1 позиция чтения = 1 позиция записи = 2 позиция чтения = 1 Записано 'a' в позиции записи, буфер теперь: '12a' чтение в позиции чтения дает '2'
Отчеты о дефектах
Следующие отчеты об изменениях поведения, влияющие на дефекты, были применены ретроактивно к ранее опубликованным стандартам C++.
| DR | Применяется к | Поведение в опубликованной версии | Корректное поведение |
|---|---|---|---|
| LWG 55 | C++98 |
seekoff
возвращал неопределённую
недопустимую позицию в потоке при ошибке |
pos_type
(
off_type
(
-
1
)
)
возвращается при ошибке |
Смотрите также
|
[virtual]
|
переставляет следующий указатель во входной последовательности, выходной последовательности или в обеих, используя абсолютную адресацию
(виртуальная защищенная функция-член) |
|
[virtual]
|
переставляет следующий указатель во входной последовательности, выходной последовательности или в обеих, используя относительную адресацию
(виртуальная защищенная функция-член
std::basic_streambuf<CharT,Traits>
)
|
|
[virtual]
|
переставляет следующий указатель во входной последовательности, выходной последовательности или в обеих, используя относительную адресацию
(виртуальная защищенная функция-член
std::basic_stringbuf<CharT,Traits,Allocator>
)
|
|
[virtual]
|
переставляет позицию в файле, используя относительную адресацию
(виртуальная защищенная функция-член
std::basic_filebuf<CharT,Traits>
)
|