GSP
Quick Navigator

Search Site

Unix VPS
A - Starter
B - Basic
C - Preferred
D - Commercial
MPS - Dedicated
Previous VPSs
* Sign Up! *

Support
Contact Us
Online Help
Handbooks
Domain Status
Man Pages

FAQ
Virtual Servers
Pricing
Billing
Technical

Network
Facilities
Connectivity
Topology Map

Miscellaneous
Server Agreement
Year 2038
Credits
 

USA Flag

 

 

Man Pages
std::unitbuf,std::nounitbuf(3) C++ Standard Libary std::unitbuf,std::nounitbuf(3)

std::unitbuf,std::nounitbuf - std::unitbuf,std::nounitbuf


Defined in header <ios>
std::ios_base& unitbuf( std::ios_base& str ); (1)
std::ios_base& nounitbuf( std::ios_base& str ); (2)


Enables or disables automatic flushing of the output stream after any output
operation. Has no effect on input.


1) enables the unitbuf flag in the stream str as if by calling
str.setf(std::ios_base::unitbuf)


2) disables the unitbuf flag in the stream str as if by calling
str.unsetf(std::ios_base::unitbuf)


This is an I/O manipulator, it may be called with an expression such as out <<
std::unitbuf for any out of type std::basic_ostream or with an expression such as in
>> std::unitbuf for any in of type std::basic_istream.


Flushing is performed in the destructor of the std::basic_ostream::sentry object,
which calls str.rdbuf()->pubsync() if str.flags() & std::ios_base::unitbuf is true.


The standard output objects std::cerr and std::wcerr have their unitbuf bit set by
default.


str - reference to I/O stream


str (reference to the stream after manipulation)


Without std::unitbuf or another explicit flush, the output is the same, but does not
appear in real time.

// Run this code


#include <iostream>
#include <chrono>


template<typename Diff>
void log_progress(Diff d)
{
std::cout << "..("
<< std::chrono::duration_cast<std::chrono::milliseconds>(d).count()
<< " ms)..";
}


int main()
{
volatile int sink = 0;
std::cout << std::unitbuf; // enable automatic flushing


auto t1 = std::chrono::high_resolution_clock::now();
for (int j = 0; j < 5; ++j)
{
for (int n = 0; n < 10000; ++n)
for (int m = 0; m < 20000; ++m)
sink += m * n; // do some work
auto now = std::chrono::high_resolution_clock::now();
log_progress(now - t1);
}
std::cout << '\n';
}


..(450 ms)....(902 ms)....(1352 ms)....(1802 ms)....(2252 ms)..


flush flushes the output stream
(function template)
endl outputs '\n' and flushes the output stream
(function template)

2022.07.31 http://cppreference.com

Search for    or go to Top of page |  Section 3 |  Main Index

Powered by GSP Visit the GSP FreeBSD Man Page Interface.
Output converted with ManDoc.