2009-09-04 14 views
11

Jak można uzyskać niebuforowany sygnał wyjściowy od cout, tak aby natychmiast zapisywał się na konsoli bez potrzeby przepłukiwania (podobnie do cerr)?Wyjście niebuforowane z coutą

Myślałem, że można to zrobić poprzez rdbuf() -> pubsetbuf, ale to nie działa. Poniższy fragment kodu poniżej powinien natychmiast wysłać do konsoli, a następnie poczekać kilka sekund. Zamiast tego, po prostu czeka, a kończy się tylko wtedy, gdy program wychodzi i bufor jest przepłukiwany.

#include <iostream> 

int main() 
{ 
     std::cout.rdbuf()->pubsetbuf(0, 0); 
     std::cout << "A"; 
     sleep(5); 
} 

Odpowiedz

32
std::cout.setf(std::ios::unitbuf); 

powinno załatwić sprawę.

+0

To rozwiązanie rzeczywiście zadziałało dla mnie, dzięki! Uwaga dla innych: buforowanie wydaje się mieć miejsce podczas używania cout lub printf i dzieje się nawet, gdy na końcu linii jest używany znak nowej linii. – Moot