std::ios_base::sync_with_stdio - cppreference.com

##### cppreference.com

##### Search

Create account

##### Namespaces

- Page
- Discussion

##### Variants

##### Views

- View
- Edit
- History

##### Actions

# std::ios_base::sync_with_stdio

From cppreference.com
< cpp‎ | io‎ | ios base

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.

### [edit] Parameters

sync | - | the new synchronization setting

### [edit] Return value

synchronization state before the call to the function

### [edit] Example

Run this code

    #include <iostream>
    #include <cstdio>

    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

### [edit] See also

coutwcout | writes to the standard C output stream stdout (global object) [edit]
cerrwcerr | writes to the standard C error stream stderr, unbuffered (global object) [edit]
clogwclog | writes to the standard C error stream stderr (global object) [edit]

Retrieved from "http://en.cppreference.com/mwiki/index.php?title=cpp/io/ios_base/sync_with_stdio&oldid=89739"