>백엔드 개발 >C++ >표준 출력을 C의 함수로 어떻게 리디렉션할 수 있나요?

표준 출력을 C의 함수로 어떻게 리디렉션할 수 있나요?

Susan Sarandon
Susan Sarandon원래의
2024-10-31 09:35:02648검색

How Can I Redirect Standard Output to a Function in C  ?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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