public member function
<streambuf> <iostream>

std::basic_streambuf::pubseekoff

pos_type pubseekoff (off_type off, ios_base::seekdir way,                     ios_base::openmode which = ios_base::in | ios_base::out);
將內部位置指標設定到相對位置
呼叫受保護的虛成員函式 seekoff,引數與 offwaywhich 相同。

basic_streambuf 中,成員 seekoff 不執行任何操作,但派生類應重寫此行為以適當修改內部指標:basic_filebufbasic_stringbuf 均重寫了此虛成員函式,以將 which 指定的內部指標設定到相對於 way 指定方向的偏移 off 的位置。

引數

off
偏移量,相對於 way 引數。
成員型別 off_type 由 *字元特性* 確定:通常,它是已簽名整型 streamoff 的別名。
way
型別為 ios_base::seekdir 的物件。它可以接受以下任何常量值
偏移量相對於...
ios_base::beg流緩衝區的開始
ios_base::cur流緩衝區中的當前位置
ios_base::end流緩衝區的末尾
which
通常用於確定要修改的 *受控序列* 的位置:*輸入序列*、*輸出序列* 或兩者。它是一個 ios_base::openmode 型別的物件,對於此函式,它可以接受以下重要常量值的任何組合。
受影響的位置指標
ios_base::in修改 *受控輸入序列* 中的當前位置
ios_base::out修改 *受控輸出序列* 中的當前位置

返回值

已修改位置指標的新位置值。
basic_streambuf 中的預設定義始終返回 -1
成員型別 pos_type 由 *字元特徵* 確定:通常,它是 fpos 型別(如 streampos),可以轉換為/從整型值轉換。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// get file size using pubseekoff
#include <iostream>     // std::cout, std::streambuf
#include <fstream>      // std::fstream

int main () {
  std::fstream filestr ("test.txt");
  if (filestr) {
    std::streambuf* pbuf = filestr.rdbuf();
    long size = pbuf->pubseekoff(0,filestr.end);
    std::cout << "The file size is " << size << " characters.\n";
    filestr.close();
  }

  return 0;
}

此程式使用 pubseekoff 將位置指標重新定位到檔案緩衝區末尾時返回的值來列印檔案 test.txt 的大小。

資料競爭

修改*流緩衝區*物件。
同時訪問同一*流緩衝區*物件可能會導致資料競爭。

異常安全

基本保證:如果丟擲異常,則流緩衝區處於有效狀態(這也適用於標準派生類)。

無效引數會導致未定義行為

另見