protected:
virtual pos_type
seekpos(pos_type sp,
ios_base::openmode which = ios_base::in | ios_base::out); // (1) C++03
pos_type
seekpos(pos_type sp,
ios_base::openmode which = ios_base::in | ios_base::out) override; // (1) C++17
概要
絶対位置指定でファイル位置を移動する。
このメンバ関数はprotectedであり、std::basic_streambufのpublicメンバ関数pubseekpos()を通して間接的に呼び出される。
事前条件
spが、同一ファイルに対する位置指定関数(seekoffまたはseekpos)の以前の成功した呼び出しによって取得された値であること。そうでない場合、動作は未定義である。
効果
可能であれば、spに格納された位置に対応するようファイル位置を変更する。ファイル位置の変更は以下のように行われる。ここでomは最後のopen()呼び出しに渡されたオープンモードである。
(om &ios_base::out) != 0の場合、出力シーケンスを更新し、シフト状態を戻すシーケンス(unshift sequence)を書き込む。- あたかも
std::fsetposを呼び出したかのようにファイル位置をspに設定する。 (om &ios_base::in) != 0の場合、入力シーケンスを更新する。
is_open()がfalseを返す場合、この操作は失敗する。また、spが無効なストリーム位置である場合、またはこの関数がどちらのシーケンスも位置指定しない場合も、位置指定操作は失敗する。
戻り値
成功した場合はspを返す。そうでない場合はpos_type(off_type(-1))を返す。
備考
引数whichは使用されない。入力・出力シーケンスのどちらを更新するかは、最後のopen()呼び出しに渡されたオープンモードのみによって決まる。
バージョン
言語
- C++98
関連項目
参照
- LWG Issue 2473.
basic_filebuf's relation to CFILEsemanticsseekposがfsetposを呼び出したかのようにファイル位置を設定する、と明確化された(CのFILEの更新モードにおける読み書き間の位置指定制約に整合させるため)- この修正は欠陥報告(DR)であり、C++98に遡及して適用される。
seekoffにはfseekの言及があるのにseekposにはCの対応関数の言及が欠けていた規定漏れの補完であり、処理系は当初からCのFILEのセマンティクスに従って実装されていたため