Namespaces
Variants

std::ios_base:: sync_with_stdio

From cppreference.net
static bool sync_with_stdio ( bool sync = true ) ;

Establece si los flujos estándar de C++ están sincronizados con los flujos estándar de C después de cada operación de entrada/salida.

Los flujos estándar de C++ son los siguientes: std::cin , std::cout , std::cerr , std::clog , std::wcin , std::wcout , std::wcerr y std::wclog .

Los flujos estándar de C son los siguientes: stdin , stdout y stderr .

Para un flujo estándar str , sincronizado con el flujo C f , los siguientes pares de funciones tienen un efecto idéntico:

1) std:: fputc ( f, c ) y str. rdbuf ( ) - > sputc ( c ) .
2) std:: fgetc ( f ) y str. rdbuf ( ) - > sbumpc ( ) .
3) std:: ungetc ( c, f ) y str. rdbuf ( ) - > sputbackc ( c ) .

En la práctica, esto significa que los flujos sincronizados de C++ no tienen búfer, y cada operación de E/S en un flujo de C++ se aplica inmediatamente al búfer del flujo C correspondiente. Esto hace posible mezclar libremente E/S de C++ y C.

Además, los flujos sincronizados de C++ están garantizados como seguros para hilos (los caracteres individuales emitidos desde múltiples hilos pueden entremezclarse, pero no ocurren condiciones de carrera).

Si la sincronización está desactivada, se permite que los flujos estándar de C++ almacenen en búfer su E/S de forma independiente, lo cual puede ser considerablemente más rápido en algunos casos.

Por defecto, los ocho flujos estándar de C++ están sincronizados con sus respectivos flujos de C.

Si esta función se llama después de que ha ocurrido E/S en el flujo estándar, el comportamiento está definido por la implementación: las implementaciones varían desde ningún efecto hasta destruir el búfer de lectura.

Contenidos

Parámetros

sync - la nueva configuración de sincronización

Valor de retorno

Estado de sincronización antes de la llamada a la función.

Ejemplo

#include <cstdio>
#include <iostream>
int main()
{
    std::ios::sync_with_stdio(false);
    std::cout << "a\n";
    std::printf("b\n");
    std::cout << "c\n";
}

Salida posible:

b
a
c

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 49 C++98 no estaba especificado (1) qué estado se devuelve realmente y
(2) qué significa 'synchronized' entre los flujos estándar de C y C++
ambos especificados

Véase también

escribe al flujo de salida estándar de C stdout
(objeto global)
escribe al flujo de error estándar de C stderr , sin búfer
(objeto global)
escribe al flujo de error estándar de C stderr
(objeto global)