Namensräume
Varianten
Aktionen

std::basic_istream<CharT,Traits>::sync

Von cppreference.com
< cpp‎ | io‎ | basic istream
 
 
 
 
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>) [bearbeiten]
synchronisiert mit dem zugrunde liegenden Speichermedium
(public member function of std::basic_ostream<CharT,Traits>) [bearbeiten]