public static member function
<ios> <iostream>
std::ios_base::sync_with_stdio
bool sync_with_stdio (bool sync = true);
Toggle synchronization with cstdio streams [static]
Toggles on or off synchronization of all the iostream standard streams with their corresponding standard C streams if it is called before the program performs its first input or output operation.
If called once an input or output operation has occurred, its effects are implementation-defined.
By default, iostream objects and cstdio streams are synchronized (as if this function was called with true
as argument).
The stream correspondences are:
If the streams are synchronized, a program can mix iostream operations with stdio operations, and their observable effects are guaranteed to follow the same order as used in the program.
If the streams are synchronized, a program can mix iostream operations with stdio operations, and their observable effects are guaranteed to follow the same order as used in the thread.
Concurrently accessing synchronized streams (i.e., streams for which this function returns true
) never introduces data races: characters are read/written individually, although with no further guarantees on its order between threads. This may result in interleaved characters between threads unless proper synchronization of entire operations is enforced by the program.
With stdio synchronization turned off, iostream standard stream objects may operate independently of the standard C streams (although they are not required to), and mixing operations may result in unexpectedly interleaved characters.
Notice that this is a static member function, and a call to this function using this member of any stream object toggles on or off synchronization for all standard iostream objects.
Parameters
- sync
- Boolean parameter indicating whether synchronization is to be turned on or off: A value of
true
requests synchronization to be turned on, while a value of false
requests it to be turned off.
Return Value
Returns the synchronization state before the call.
It always returns true the first time it is called.
Data races
May modify the stream object.
Concurrent access to the same stream object may cause data races.
Exception safety
Basic guarantee: if an exception is thrown, the stream is in a valid state.