Namensräume
Varianten
Aktionen

std::ios_base::sync_with_stdio

Von cppreference.com
< cpp‎ | io‎ | ios base
 
 
 
 
static bool sync_with_stdio( bool sync = true );

Legt fest, ob die Standard-C++-Streams nach jeder Ein-/Ausgabeoperation mit den Standard-C-Streams synchronisiert werden.

Die Standard-C++-Streams sind die folgenden: std::cin, std::cout, std::cerr, std::clog, std::wcin, std::wcout, std::wcerr und std::wclog.

Die Standard-C-Streams sind die folgenden: stdin, stdout und stderr.

Für einen Standard-Stream str, der mit dem C-Stream f synchronisiert ist, haben die folgenden Funktionspaare identische Auswirkungen:

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

Das bedeutet in der Praxis, dass die synchronisierten C++-Streams ungepuffert sind und jede Ein-/Ausgabeoperation auf einem C++-Stream sofort auf den Puffer des entsprechenden C-Streams angewendet wird. Dadurch ist es möglich, C++- und C-Ein-/Ausgaben frei zu mischen.

Zusätzlich wird garantiert, dass synchronisierte C++-Streams threadsicher sind (einzelne ausgegebene Zeichen von mehreren Threads können sich überlappen, aber es treten keine Datenrennen auf).

Wenn die Synchronisierung deaktiviert wird, dürfen die Standard-C++-Streams ihre Ein-/Ausgaben unabhängig puffern, was in manchen Fällen erheblich schneller sein kann.

Standardmäßig sind alle acht Standard-C++-Streams mit ihren jeweiligen C-Streams synchronisiert.

Wenn diese Funktion nach einer Ein-/Ausgabeoperation auf dem Standard-Stream aufgerufen wird, ist das Verhalten implementierungsabhängig: Die Implementierungen reichen von keiner Auswirkung bis zur Zerstörung des Lesepuffers.

Inhalt

[bearbeiten] Parameter

sync - die neue Synchronisierungseinstellung

[bearbeiten] Rückgabewert

Synchronisierungsstatus vor dem Aufruf der Funktion.

[bearbeiten] Beispiel

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

Mögliche Ausgabe

b
a
c

[bearbeiten] 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 49 C++98 es war nicht spezifiziert (1), welcher Status tatsächlich zurückgegeben wird und
(2) was "synchronisiert" zwischen Standard-C- und C++-Streams bedeutet
beides wurde spezifiziert

[bearbeiten] Siehe auch

schreibt in den Standard-C-Ausgabestrom stdout
(globales Objekt)[bearbeiten]
schreibt in den Standard-C-Fehlerstrom stderr, unbuffered
(globales Objekt)[bearbeiten]
schreibt in den Standard-C-Fehlerstrom stderr
(globales Objekt)[bearbeiten]