2013-05-18 1 views
0

std::cout에 대한 버퍼링을 사용하지 않도록 설정하는이 프로그램이 있습니다. 내가 출력 장치에 쓴 것을 인쇄하고 싶지만, 내가 인쇄 할 때 str은 나오지 않습니다.버퍼링되지 않은 I/O가 작동하지 않습니다.

#include <iostream> 
#include <sstream> 
#include <string> 

int main() 
{ 
    std::cout.rdbuf()->pubsetbuf(0, 0); 
    std::cout.unsetf(std::ios::unitbuf); 

    std::cout << "Hello, World\n"; 

    std::stringstream ss; 
    ss << std::cout.rdbuf(); 

    std::string str{ss.str()}; 

    std::cout << str; // nothing 
    // str.size() == 0 
} 

답변

3
std::cout.rdbuf()->pubsetbuf(0, 0); 

coutstd::filebuf를 사용하도록 지정되지 않았기 때문에이 반드시 아무것도하지 않습니다. I/O가 하지 버퍼링하므로

std::cout.unsetf(std::ios::unitbuf); 

unitbuf 비트를 지 웁니다. 대신 setf을 호출하면 원하는대로 버퍼되지 않은 I/O를 요청해야합니다.

ss << std::cout.rdbuf(); 

이것은 아무것도 추출하지 않게 cout을 읽기를 시도.

그냥 setf(std::ios::unitbuf) works as expected에 의존 :

#include <iostream> 
#include <unistd.h> 

int main() { 
    std::cout.setf(std::ios::unitbuf); 

    std::cout << "Hel"; 
    write(1, "lo, wo", 6); 
    std::cout << "rld!\n"; 
} 
관련 문제