STDOUT을 사용자 정의 핸들러로 리디렉션
일반적으로 stdout 스트림으로 전달되는 출력을 조정하려는 애플리케이션에서는 다음 방법을 찾을 수 있습니다. 다른 곳으로 리디렉션합니다. stdio를 파일로 리디렉션할 수 있다는 것이 일반적으로 알려져 있지만, 자신이 정의한 함수로 리디렉션하는 것을 고려해 보는 것은 어떨까요?
C의 표준 출력 이해
먼저, stderr 및 stdin과 함께 stdout이 형식화되지 않은 데이터에 대해 미리 정의된 출력 스트림을 나타낸다는 점을 이해하는 것이 중요합니다. C iostream과 마찬가지로 printf 함수는 stdout을 사용하여 출력을 표시합니다.
ostringstream을 통해 리디렉션 달성
사용자 정의 함수로의 리디렉션이 실제로 가능합니다. cout, cerr 및 clog 스트림의 경우 자체 streambuf를 구현할 필요 없이 ostringstream의 도움으로 이를 달성할 수 있습니다. 다음은 샘플 코드 조각입니다.
<code class="cpp">// Redirect cout. streambuf* oldCoutStreamBuf = cout.rdbuf(); ostringstream strCout; cout.rdbuf( strCout.rdbuf() ); // Output goes to the string stream. cout << "Hello, World!" << endl; // Restore original cout. cout.rdbuf( oldCoutStreamBuf ); // Retrieve content from the string stream. cout << strCout.str();</code>
주의 사항 및 대체 방법
이 방법은 cout, cerr 및 clog의 출력을 리디렉션할 수 있지만 작동하지 않을 수 있습니다. stdout 및 stderr에 대해 원활하게 작동합니다. 예를 들어 printf는 사용자 정의 함수로 출력하지 않습니다.
더 작은 데이터 크기의 경우 freopen 또는 setbuf를 사용하는 것이 실행 가능한 옵션입니다. 그러나 더 많은 양의 데이터의 경우 파이프로 리디렉션하는 정교한 dup 또는 dup2 메커니즘을 사용하는 것이 좋습니다.
위 내용은 C에서 STDOUT을 사용자 정의 함수로 어떻게 리디렉션할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!