Namespaces
Variants

std::ios_base:: sync_with_stdio

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

Détermine si les flux C++ standard sont synchronisés avec les flux C standard après chaque opération d'entrée/sortie.

Les flux standard C++ sont les suivants : std::cin , std::cout , std::cerr , std::clog , std::wcin , std::wcout , std::wcerr et std::wclog .

Les flux standards en C sont les suivants : stdin , stdout et stderr .

Pour un flux standard str , synchronisé avec le flux C f , les paires de fonctions suivantes ont un effet identique :

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

En pratique, cela signifie que les flux C++ synchronisés ne sont pas mis en mémoire tampon, et chaque opération d'E/S sur un flux C++ est immédiatement appliquée au tampon du flux C correspondant. Cela permet de mélanger librement les E/S C++ et C.

De plus, les flux C++ synchronisés garantissent d'être thread-safe (les caractères individuels émis par plusieurs threads peuvent s'entrelacer, mais aucune course aux données ne se produit).

Si la synchronisation est désactivée, les flux standard C++ sont autorisés à mettre en mémoire tampon leurs E/S indépendamment, ce qui peut être considérablement plus rapide dans certains cas.

Par défaut, les huit flux standard C++ sont synchronisés avec leurs flux C respectifs.

Si cette fonction est appelée après qu'une opération d'E/S ait eu lieu sur le flux standard, le comportement est défini par l'implémentation : les implémentations varient de l'absence d'effet à la destruction du tampon de lecture.

Table des matières

Paramètres

sync - le nouveau paramètre de synchronisation

Valeur de retour

État de synchronisation avant l'appel à la fonction.

Exemple

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

Sortie possible :

b
a
c

Rapports de défauts

Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.

DR Applicable à Comportement publié Comportement corrigé
LWG 49 C++98 il n'était pas spécifié (1) quel état est réellement retourné et
(2) ce que signifie 'synchronisé' entre les flux standards C et C++
les deux sont spécifiés

Voir aussi

écrit dans le flux de sortie standard C stdout
(objet global)
écrit dans le flux d'erreur standard C stderr , non tamponné
(objet global)
écrit dans le flux d'erreur standard C stderr
(objet global)