C ++에서 C의 일부 기능을 실행하고 싶습니다. 이 함수는 FILE *을 인수로 사용합니다.
void getInfo(FILE* buff, int secondArgument);
stdout으로 인쇄하도록 만들 수 있습니다.
getInfo(stdout, 1);
// the function prints results into stdout, results for each value secondArgument
그러나이 함수를 C ++에서 스트림 또는 문자열 스트림으로 인쇄하도록 만드는 방법은 무엇입니까? 함수가 인쇄하는 내용을 문자열로 캡처하고 결과 문자열에 대해 일부 처리를 수행하고 싶습니다.
나는 다음과 같이 시도합니다.
for (i=0; i<1000; i++) {
getInfo(stdout, i);
// but dont want print to stdout. I want capture for each i, the ouput to some string
// or array of strings for each i.
}
Linux에서 가장 좋은 방법은 익명 파이프입니다.
먼저 파이프를 만듭니다.
int redirectPipe[2];
pipe(redirectPipe)
그런 다음 fdopen을 사용하여 pipe (2)를 통해 반환 된 파일 설명자를 엽니 다.
FILE* inHandle = fdopen(redirectPipe[0], "w");
FILE* outHandle = fdopen(redirectPipe[1], "r");
함수를 호출하십시오.
getInfo(inHandle, someValue);
그런 다음 outHandle
일반 파일처럼 사용하여 읽으십시오 .
주의해야 할 사항 : 파이프는 고정 된 버퍼 크기를 가지며 getInfo 함수가 버퍼를 채울 가능성이있는 경우 교착 상태가됩니다.
교착 상태를 방지하려면 getInfo
다른 스레드에서 호출 하거나 fcntl
및을 사용하여 파이프 버퍼 크기를 늘릴 수 있습니다 F_SETPIPE_SZ
. 또는 Ben Voigt가 주석에서 언급했듯이 임시 파일을 만듭니다.
참고 : OP가 "리눅스에서 최고의 제품"을 원한다고 언급했기 때문에 나는 * nix에 한정되었습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다