Namespaces
Variants

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

From cppreference.net
int sync ( ) ;

Sincroniza el búfer de entrada con la fuente de datos asociada.

Se comporta como una UnformattedInputFunction , excepto que gcount() no se ve afectada. Después de construir y verificar el objeto centinela,

Si rdbuf() es un puntero nulo, retorna - 1 .

De lo contrario, llama a rdbuf ( ) - > pubsync ( ) . Si esa función retorna - 1 , llama a setstate ( badbit ) y retorna - 1 . De lo contrario, retorna 0 .

Contenidos

Parámetros

(ninguno)

Valor de retorno

0 en caso de éxito, - 1 en caso de fallo o si el flujo no admite esta operación (no tiene búfer).

Notas

Al igual que con readsome() , está definido por la implementación si esta función hace algo con los flujos proporcionados por la biblioteca. La intención típica es que la siguiente operación de lectura recoja cualquier cambio que se haya realizado en la secuencia de entrada asociada después de que el búfer de flujo llenó por última vez su área de obtención. Para lograr eso, sync() puede vaciar el área de obtención, o puede rellenarla, o puede no hacer nada. Una excepción notable es Visual Studio, donde esta operación descarta la entrada no procesada cuando se llama con un flujo de entrada estándar.

Ejemplo

Demuestra el uso del flujo de entrada sync() con entrada de archivo. Nótese que la salida aquí está definida por la implementación, ya que las llamadas a std::basic_filebuf::sync están definidas por la implementación para lecturas.

#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';
}

Salida posible:

Reading from the file
abc
Reading from the file, with sync()
a23

Informes de defectos

Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares de C++ publicados anteriormente.

DR Aplicado a Comportamiento publicado Comportamiento correcto
LWG 62 C++98 sync() devolvía traits :: eof ( ) si rdbuf ( ) - > pubsync ( ) devuelve - 1 devuelve - 1 en este caso

Véase también

[virtual]
sincroniza los búferes con la secuencia de caracteres asociada
(función miembro protegida virtual de std::basic_streambuf<CharT,Traits> )
sincroniza con el dispositivo de almacenamiento subyacente
(función miembro pública de std::basic_ostream<CharT,Traits> )