table of contents
- Tumbleweed 2024.07.05-1.3
- Leap-16.0
- Leap-15.6
std::ios_base::sync_with_stdio(3) | C++ Standard Libary | std::ios_base::sync_with_stdio(3) |
NAME¶
std::ios_base::sync_with_stdio - std::ios_base::sync_with_stdio
Synopsis¶
static bool sync_with_stdio( bool sync = true );
Sets whether the standard C++ streams are synchronized to the standard C
streams
after each input/output operation.
The standard C++ streams are the following: std::cin, std::cout, std::cerr,
std::clog, std::wcin, std::wcout, std::wcerr and std::wclog.
The standard C streams are the following: stdin, stdout and stderr.
For a standard stream str, synchronized with the C stream f, the following
pairs of
functions have identical effect:
1) std::fputc(f, c) and str.rdbuf()->sputc(c).
2) std::fgetc(f) and str.rdbuf()->sbumpc().
3) std::ungetc(c, f) and str.rdbuf()->sputbackc(c).
In practice, this means that the synchronized C++ streams are unbuffered, and
each
I/O operation on a C++ stream is immediately applied to the corresponding C
stream's
buffer. This makes it possible to freely mix C++ and C I/O.
In addition, synchronized C++ streams are guaranteed to be thread-safe
(individual
characters output from multiple threads may interleave, but no data races
occur).
If the synchronization is turned off, the C++ standard streams are allowed to
buffer
their I/O independently, which may be considerably faster in some cases.
By default, all eight standard C++ streams are synchronized with their
respective C
streams.
If this function is called after I/O has occurred on the standard stream, the
behavior is implementation-defined: implementations range from no effect to
destroying the read buffer.
Parameters¶
sync - the new synchronization setting
Return value¶
Synchronization state before the call to the function.
Example¶
// Run this code
#include <cstdio>
#include <iostream>
int main()
{
std::ios::sync_with_stdio(false);
std::cout << "a\n";
std::printf("b\n");
std::cout << "c\n";
}
Possible output:¶
b
a
c
Defect reports
The following behavior-changing defect reports were applied retroactively to
previously published C++ standards.
DR Applied to Behavior as published Correct behavior
it was unspecified (1) which state is actually
LWG 49 C++98 returned and both specified
(2) what does 'synchronized' between standard C
and C++ streams mean
See also¶
cout writes to the standard C output stream stdout
wcout (global object)
cerr writes to the standard C error stream stderr, unbuffered
wcerr (global object)
clog writes to the standard C error stream stderr
wclog (global object)
2024.06.10 | http://cppreference.com |