2009-09-04 7 views
11

Как вы можете получить небуферизованный вывод cout, чтобы он мгновенно записывал на консоль без необходимости скрывать (аналогично cerr)?Небуферизованный вывод с cout

Я думал, что это можно сделать через rdbuf() -> pubsetbuf, но это, похоже, не работает. Следующий снимок кода ниже должен немедленно выводиться на консоль, а затем ждать несколько секунд. Но вместо этого он просто ждет и выводит только при выходе программы и буфера.

#include <iostream> 

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

ответ

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

Если сделать трюк.

+0

Это решение действительно сработало для меня, спасибо! Замечание для других: буферизация появляется при использовании cout или printf и происходит даже в том случае, если в конце строки используется новая строка. – Moot

Смежные вопросы