std::basic_istream<CharT,Traits>::sync
| int sync(); |
||
Synchronisiert den Eingabepuffer mit der zugehörigen Datenquelle.
Verhält sich wie eine UnformattedInputFunction, außer dass gcount() nicht betroffen ist. Nach dem Konstruieren und Überprüfen des Sentry-Objekts,
Wenn rdbuf() ein Nullzeiger ist, wird -1 zurückgegeben.
Andernfalls wird rdbuf()->pubsync() aufgerufen. Wenn diese Funktion -1 zurückgibt, wird setstate(badbit) aufgerufen und -1 zurückgegeben. Andernfalls wird 0 zurückgegeben.
Inhalt |
[edit] Parameter
(keine)
[edit] Rückgabewert
0 bei Erfolg, -1 bei Fehler oder wenn der Stream diese Operation nicht unterstützt (ungepuffert ist).
[edit] Hinweise
Wie bei readsome() ist es implementierungsabhängig, ob diese Funktion etwas mit bibliothekseigenen Streams tut. Die Absicht ist typischerweise, dass die nächste Leseoperation alle Änderungen aufnimmt, die möglicherweise an der zugehörigen Eingabesequenz vorgenommen wurden, nachdem der Stream-Puffer seinen Get-Bereich zuletzt gefüllt hat. Um dies zu erreichen, kann sync() den Get-Bereich leeren, ihn auffüllen oder nichts tun. Eine bemerkenswerte Ausnahme ist Visual Studio, wo diese Operation bei Aufruf mit einem Standard-Eingabestream die unverarbeitete Eingabe verwirft.
[edit] Beispiel
Demonstriert die Verwendung von sync() eines Eingabestreams mit Dateieingabe. Beachten Sie, dass die Ausgabe hier implementierungsabhängig ist, da Aufrufe von std::basic_filebuf::sync für Lesevorgänge implementierungsabhängig sind.
#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'; }
Mögliche Ausgabe
Reading from the file abc Reading from the file, with sync() a23
[edit] Fehlerberichte
Die folgenden Verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | angewendet auf | Verhalten wie veröffentlicht | Korrigiertes Verhalten |
|---|---|---|---|
| LWG 62 | C++98 | sync() gab traits::eof() zurück, wenn rdbuf()->pubsync() -1 zurückgab. |
gibt in diesem Fall -1 zurück. |
[edit] Siehe auch
| [virtuell] |
synchronisiert die Puffer mit der zugeordneten Zeichensequenz (virtuelle geschützte Member-Funktion von std::basic_streambuf<CharT,Traits>) |
| synchronisiert mit dem zugrunde liegenden Speichermedium (public member function of std::basic_ostream<CharT,Traits>) |