C에서 표준 출력 리디렉션
C에서 표준 출력 스트림(stdout)은 일반적으로 데이터를 콘솔로 보냅니다. 그러나 처리를 위해 이 출력을 사용자 정의 함수로 리디렉션하려는 상황이 있습니다.
ostringstream을 사용하여 함수로 리디렉션
stdout을 다음으로 리디렉션하는 한 가지 접근 방식 함수는 ostringstream을 활용하는 것입니다. 이것은 본질적으로 자신에게 전달되는 모든 스트림의 출력을 캡처하는 메모리 기반 스트림 버퍼입니다.
<code class="cpp">// Declare a new ostringstream ostringstream strCout; // Redirect cout to the ostringstream cout.rdbuf(strCout.rdbuf()); // Write to the ostringstream cout << "test" << endl; // Restore the original cout stream cout.rdbuf(oldCoutStreamBuf);</code>
이제 strCout 개체에는 stdout으로 전달되었을 출력이 포함됩니다. 그런 다음 추가 처리를 위해 이 출력을 사용자 정의 함수에 전달할 수 있습니다.
<code class="cpp">void MyHandler(const char* data) { // Process the data from strCout.str() } MyHandler(strCout.str().c_str());</code>
시스템 호출을 사용하여 함수로 리디렉션
또 다른 접근 방식은 다음과 같은 시스템 호출을 사용하는 것입니다. freopen() 또는 setbuf()는 stdout을 파이프로 리디렉션합니다. 이를 통해 별도의 프로세스나 스레드에서 출력을 캡처할 수 있습니다.
<code class="cpp">// Open a file stream to a named pipe FILE* pipe = fopen("my_pipe", "w"); // Redirect stdout to the pipe setbuf(stdout, pipe); // Write to stdout printf("test"); // Close the pipe fclose(pipe);</code>
이제 printf의 출력이 파이프에 기록됩니다. 그런 다음 별도의 프로세스나 스레드를 생성하여 파이프에서 읽고 원하는 처리를 수행할 수 있습니다.
제한 사항
ostringstream을 사용하여 stdout을 리디렉션하면 파이프의 출력에만 영향을 미칩니다. cout. printf 또는 stderr과 같은 다른 스트림은 여전히 콘솔에 출력될 수 있습니다. 완전한 리디렉션을 위해서는 시스템 호출 접근 방식을 사용하거나 사용자 정의 streambuf 구현을 고려하세요.
위 내용은 표준 출력을 C의 함수로 어떻게 리디렉션할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!