File streams are buffered by default, as are many other types of streams. This means that writes to the stream may not cause the underlying file to change immediately. In oder to force all buffered writes to take place immediately, you can flush the stream. You can do this either directly by invoking the
flush() method or through the
std::flush stream manipulator:
std::ofstream os("foo.txt"); os << "Hello World!" << std::flush; char data = "Foo"; os.write(data, 3); os.flush();
There is a stream manipulator
std::endl that combines writing a newline with flushing the stream:
// Both following lines do the same thing os << "Hello World!\n" << std::flush; os << "Hello world!" << std::endl;
Buffering can improve the performance of writing to a stream. Therefore, applications that do a lot of writing should avoid flushing unnecessarily. Contrary, if I/O is done infrequently, applications should consider flushing frequently in order to avoid data getting stuck in the stream object.