protected virtual member function
<fstream>

std::filebuf::seekoff

streampos seekoff (streamoff off, ios_base::seekdir way,                   ios_base::openmode which = ios_base::in | ios_base::out);
设置内部位置到相对位置
设置由参数 which 指定的内部位置指针的新位置。此位置是通过相对于 way 指定的原点计算的 off 个字符的偏移量来确定的。

除非 off 为零且 waycur,否则该函数还会将“中间输出缓冲区”中任何未写入的字符写入文件(如果需要,还会使用适当的 facet 调用 unshift)。

成功时,此函数的效果与调用 fseek 的等效调用相同(有关详细信息和限制,例如在以文本模式打开的文件上,请参阅 fseek)。

此虚函数由公共成员 streambuf::pubseekoff 调用。

参数

off
偏移量,相对于 way 参数。
streamoff 是一个有符号整数类型。
way
类型为 ios_base::seekdir 的对象,指示偏移量应用的来源。它可以取以下任意常量值:
偏移量相对于...
ios_base::beg文件开头
ios_base::cur根据参数 which,是“输入位置”还是“输出位置”的当前位置。
ios_base::end文件结尾
which
确定受影响的是哪个“内部位置指针”:“输入位置”、“输出位置”或两者都受影响。它是一个 ios_base::openmode 类型的对象,对于此函数,它可以接受以下任何显着常量值的组合:
受影响的位置指针
ios_base::in修改“输入位置”及其对应的“get 指针”(gptr
ios_base::out修改“输出位置”及其对应的“put 指针”(pptr
两个位置可以同时选择,但如果在 wayios_base::cur 时同时选择两者,则函数会失败。

返回值

成功时,它返回调用后“内部位置指针”指向的新绝对位置,前提是可以表示为 streampos 类型的值。
失败时,或无法实现上述目标时,该函数返回 streampos(streamoff(-1))
streampos 是一种定位类型,可以转换为/从整数类型转换(一个 fpos 类型)。

数据竞争

修改 filebuf 对象。
同时访问同一个文件流缓冲区对象可能导致数据争用。

异常安全

基本保证:如果抛出异常,*文件流缓冲区*处于有效状态。

另见