最終更新日時:
が更新

履歴 編集

function
<fstream>

std::basic_filebuf::seekpos

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_streambufpublicメンバ関数pubseekpos()を通して間接的に呼び出される。

事前条件

spが、同一ファイルに対する位置指定関数(seekoffまたはseekpos)の以前の成功した呼び出しによって取得された値であること。そうでない場合、動作は未定義である。

効果

可能であれば、spに格納された位置に対応するようファイル位置を変更する。ファイル位置の変更は以下のように行われる。ここでomは最後のopen()呼び出しに渡されたオープンモードである。

  1. (om &ios_base::out) != 0の場合、出力シーケンスを更新し、シフト状態を戻すシーケンス(unshift sequence)を書き込む。
  2. あたかもstd::fsetposを呼び出したかのようにファイル位置をspに設定する。
  3. (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 C FILE semantics
    • seekposfsetposを呼び出したかのようにファイル位置を設定する、と明確化された(CのFILEの更新モードにおける読み書き間の位置指定制約に整合させるため)
    • この修正は欠陥報告(DR)であり、C++98に遡及して適用される。seekoffにはfseekの言及があるのにseekposにはCの対応関数の言及が欠けていた規定漏れの補完であり、処理系は当初からCのFILEのセマンティクスに従って実装されていたため