std::basic_istream<CharT,Traits>:: sync
|
int
sync
(
)
;
|
||
入力バッファを関連付けられたデータソースと同期します。
UnformattedInputFunction として振る舞うが、 gcount() には影響を与えない。セントリオブジェクトを構築・チェックした後、
rdbuf() が null ポインタの場合、 - 1 を返します。
それ以外の場合、 rdbuf ( ) - > pubsync ( ) を呼び出す。その関数が - 1 を返した場合、 setstate ( badbit ) を呼び出し、 - 1 を返す。それ以外の場合、 0 を返す。
目次 |
パラメータ
(なし)
戻り値
0 成功時、 - 1 失敗時、またはストリームがこの操作をサポートしていない場合(バッファリングされていない場合)。
注記
readsome()
と同様に、ライブラリ提供のストリームに対してこの関数が何らかの処理を行うかどうかは実装定義です。意図としては、通常、ストリームバッファが最後にゲット領域を補充した後に、関連付けられた入力シーケンスに対して行われた可能性のある変更を、次の読み取り操作で検出できるようにすることです。これを実現するために、
sync()
はゲット領域を空にするか、再補充するか、あるいは何もしない可能性があります。注目すべき例外はVisual Studioであり、標準入力ストリームに対してこの操作を呼び出すと、未処理の入力が破棄されます。
例
ファイル入力における入力ストリーム
sync()
の使用例を示します。読み取り時の
std::basic_filebuf::sync
の呼び出しは実装定義であるため、ここでの出力は実装定義であることに注意してください。
#include <fstream> #include <iostream> void file_abc() { std::ofstream f("test.txt"); f << "abc\n"; } void file_123() { std::ofstream f("test.txt"); f << "123\n"; } int main() { file_abc(); // file now contains "abc" std::ifstream f("test.txt"); std::cout << "Reading from the file\n"; char c; f >> c; std::cout << c; file_123(); // file now contains "123" f >> c; std::cout << c; f >> c; std::cout << c << '\n'; f.close(); file_abc(); // file now contains "abc" f.open("test.txt"); std::cout << "Reading from the file, with sync()\n"; f >> c; std::cout << c; file_123(); // file now contains "123" f.sync(); f >> c; std::cout << c; f >> c; std::cout << c << '\n'; }
出力例:
Reading from the file abc Reading from the file, with sync() a23
不具合報告
以下の動作変更の欠陥報告書は、以前に公開されたC++規格に対して遡及的に適用されました。
| DR | 適用対象 | 公開時の動作 | 正しい動作 |
|---|---|---|---|
| LWG 62 | C++98 |
sync()
は
traits
::
eof
(
)
を返していた
rdbuf
(
)
-
>
pubsync
(
)
が
-
1
を返す場合
|
この場合 - 1 を返す |
関連項目
|
[virtual]
|
関連付けられた文字シーケンスとバッファを同期する
(
std::basic_streambuf<CharT,Traits>
の仮想 protected メンバ関数)
|
|
基盤となる記憶装置と同期する
(
std::basic_ostream<CharT,Traits>
の public メンバ関数)
|