setbuf ()가 cout에 영향을 미칩니 까?
-
03-07-2019 - |
문제
다시, 선생님은 내 질문에 대답 할 수 없었습니다. 누가 할 수 있는지 알았습니다 ...
그래서, 나는 C. C ++에서 C.를 배운 적이 없다. 최근 과제에서 선생님은 우리에게
setbuf( stdout , NULL );
Main () 상단에서 부패하지 않은 출력을 얻으려면 출력을 올바르게 볼 수 있습니다.
내 질문은 이것입니다 :이 진술은 cout 문에 영향을 미칩니 까?
미리 감사드립니다!
다른 팁
기본적으로 STDOUT 또는 COUT가 콘솔에 인쇄하는 경우 출력은 라인 버퍼링됩니다. 이는 인쇄 된 모든 Newline이 출력을 플러시 할 것임을 의미합니다. 예를 들어, 출력을 파일로 리디렉션하고 Tail -F를 사용하고 실시간에 특정 출력이 필요합니다.
Chris가 말했듯이 sync_with_stdio 부패하지 않은 stdout을 부패하지 않은 cout (기본적으로)와 묶어야하지만 stdout에서 setbuf를 사용하는 대신 Cout을 사용하는 것이 더 나은 옵션은 사용하는 것입니다. pubsetbuf 포인터에서 rdbuf. 즉:
// make cout unbuffered
std::cout.rdbuf()->pubsetbuf(0, 0);
흥미로울 수있는 또 다른 기능은 묶다.
일반적으로 출력을 즉시 보는 것이 중요 할 때, 우리는 실제로 거래를하기 전에 하드 드라이브에 거래를 기록 해야하는 복잡한 신뢰할 수있는 재무 루틴에 대해 이야기하고 있습니다. 또는 (훨씬 더 일반적인 경우) 프로그램이 충돌하는 경우에도 디버그 메시지를보고 싶습니다.
당신이 공부하고 있기 때문에, 나는 당신이 두 번째 사건을 다루고 있다고 가정 할 것입니다. 이 경우 저의 조언은 stdout 대신 stderr를 사용하는 것입니다. 기본적으로 부패하지 않으며 STDOUT와 별도로 리디렉션하여 출력을 한 곳에 놓고 다른 곳에 로깅 할 수 있습니다.