>백엔드 개발 >C++ >C에서 STDOUT을 사용자 정의 함수로 리디렉션하려면 어떻게 해야 합니까?

C에서 STDOUT을 사용자 정의 함수로 리디렉션하려면 어떻게 해야 합니까?

Susan Sarandon
Susan Sarandon원래의
2024-11-01 01:02:031027검색

How Can I Redirect STDOUT to a Custom Function in C  ?

C에서 STDOUT 리디렉션

특정 애플리케이션 요구 사항을 수용하려면 프로그래밍에서 출력 흐름을 재설계해야 하는 경우가 많습니다. 이 문서에서는 STDOUT으로 향하는 출력을 사용자 정의 함수로 리디렉션하고 관련된 기본 메커니즘을 조사하고 실용적인 솔루션을 제공하는 쿼리를 다룹니다.

리디렉션 기술

STDOUT을 파일로 리디렉션하는 것에 대한 일반적인 지식을 바탕으로 함수로의 리디렉션 개념도 동일하게 실현 가능합니다. 이 기술은 지정된 함수인 MyHandler를 활용하여 STDOUT으로 전송될 데이터를 수신하고 처리합니다.

구현

구현은 cout 및 cerr 스트림 리디렉션을 중심으로 이루어집니다. 문자열 스트림(ostringstream)으로. 다음은 간단한 예입니다.

<code class="cpp">// Redirect cout
streambuf* oldCoutStreamBuf = cout.rdbuf();
ostringstream strCout;
cout.rdbuf(strCout.rdbuf());

// Custom function
void MyHandler(const char* data) {}

// Output to the string stream
cout << "Hello, World!" << endl;

// Restore original cout
cout.rdbuf(oldCoutStreamBuf);

// Display the collected output from the string stream
cout << strCout.str();</code>

안타깝게도 이 방법은 STDOUT으로 향하는 전체 출력이 아니라 cout용으로 특별히 의도된 데이터만 리디렉션합니다. 예를 들어 printf 출력은 리디렉션되지 않습니다.

추가 옵션

보다 포괄적인 출력 리디렉션을 달성하려면 freopen, setbuf 또는 dup 및 dup2와 같은 기술을 사용하는 것이 좋습니다. 시스템 호출. 이러한 방법은 STDOUT 출력의 리디렉션을 허용하지만 특정 제한 사항이 있으며 모든 시나리오에 적합하지 않을 수 있습니다.

위 내용은 C에서 STDOUT을 사용자 정의 함수로 리디렉션하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.