public member function
<streambuf> <iostream>

std::streambuf::pubseekoff

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

seekoff 成員函式在 streambuf 中不執行任何操作,但派生類應重寫此行為以適當修改內部指標:filebufstringbuf 都重寫了這個虛擬成員函式,以將 which 指定的內部指標設定到 way 指定的方向偏移 off 的位置。

引數

off
偏移量,相對於 way 引數。
streamoff 是一個偏移量型別(通常是有符號整數型別)。
way
型別為 ios_base::seekdir 的物件。它可以接受以下任何常量值
偏移量相對於...
ios_base::beg流緩衝區的開始
ios_base::cur流緩衝區中的當前位置
ios_base::end流緩衝區的末尾
which
通常用於確定將修改哪個受控序列的位置:輸入序列輸出序列,或兩者。它是一個 ios_base::openmode 型別的物件,對於此函式,它可以接受以下任意組合的有效常量值
受影響的位置指標
ios_base::in修改 *受控輸入序列* 中的當前位置
ios_base::out修改 *受控輸出序列* 中的當前位置

返回值

被修改的位置指標的新位置值。
streambuf 中的預設定義始終返回 -1
streampos 是一種定位型別,可以轉換為/從整數型別轉換(一個 fpos 型別)。

示例

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 的大小。

資料競爭

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

異常安全

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

另見