FILE * stdout을 C ++의 문자열로 리디렉션

user3654650

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.
}
Holgac

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] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

stdout을 tcsh의 stderr로 리디렉션

분류에서Dev

프로세스의 stdout을 자체 stdin으로 리디렉션

분류에서Dev

stdout과 stderr을 함께 리디렉션 VS stdout을 리디렉션 한 다음 stderr을 stdout의 파일로 리디렉션

분류에서Dev

C 미리 정의 된 메시지를 사용하여 stdout을 파일로 리디렉션

분류에서Dev

stdout 및 / 또는 stderr을 변수의 경로로 리디렉션

분류에서Dev

여러 stdout 명령을 하나의 파일로 리디렉션

분류에서Dev

stdout / stderr을 null vs2017 C ++로 리디렉션

분류에서Dev

문자열 배열을 C #의 문자열 컬렉션으로 변환

분류에서Dev

.htaccess로 슬래시 뒤의 문자열을 고려하여 리디렉션

분류에서Dev

c의 여러 tty로 리디렉션

분류에서Dev

Python의 하위 프로세스 / Popen에서 stdout을 stderr로 리디렉션

분류에서Dev

cronjob의 STDOUT 리디렉션

분류에서Dev

EOF의 stdout 리디렉션

분류에서Dev

C 프로그램에서 STDOUT을 STDIN으로 리디렉션하는 방법

분류에서Dev

명령의`stdin`과`stdout`을 출력으로 리디렉션하는 방법

분류에서Dev

bash의 stdin과 stdout을 모두 다른 파일로 리디렉션

분류에서Dev

명령의`stdin`과`stdout`을 출력으로 리디렉션하는 방법

분류에서Dev

stdin을 stdout으로 리디렉션

분류에서Dev

pybind11 print ()에서 Python sys.stdout을 C ++로 리디렉션

분류에서Dev

파일 내용을 C의 다른 프로그램으로 리디렉션

분류에서Dev

htaccess의 301 리디렉션이 쿼리 문자열을 인식하지 못함

분류에서Dev

stdout 및 stderr을 파일로, stderr을 stdout으로 리디렉션

분류에서Dev

C-자식 프로세스의 IO 리디렉션

분류에서Dev

특정 문자열이있는 URL을 워드 프레스의 다른 URL로 리디렉션하려면

분류에서Dev

디렉토리의 내용을 상위 폴더의 다른 디렉토리로 리디렉션

분류에서Dev

쿼리 문자열을 기반으로 리디렉션

분류에서Dev

쿼리 문자열을 기반으로 .htaccess 리디렉션

분류에서Dev

쿼리 문자열을 루트로 리디렉션

분류에서Dev

쿼리 문자열을 루트로 리디렉션

Related 관련 기사

  1. 1

    stdout을 tcsh의 stderr로 리디렉션

  2. 2

    프로세스의 stdout을 자체 stdin으로 리디렉션

  3. 3

    stdout과 stderr을 함께 리디렉션 VS stdout을 리디렉션 한 다음 stderr을 stdout의 파일로 리디렉션

  4. 4

    C 미리 정의 된 메시지를 사용하여 stdout을 파일로 리디렉션

  5. 5

    stdout 및 / 또는 stderr을 변수의 경로로 리디렉션

  6. 6

    여러 stdout 명령을 하나의 파일로 리디렉션

  7. 7

    stdout / stderr을 null vs2017 C ++로 리디렉션

  8. 8

    문자열 배열을 C #의 문자열 컬렉션으로 변환

  9. 9

    .htaccess로 슬래시 뒤의 문자열을 고려하여 리디렉션

  10. 10

    c의 여러 tty로 리디렉션

  11. 11

    Python의 하위 프로세스 / Popen에서 stdout을 stderr로 리디렉션

  12. 12

    cronjob의 STDOUT 리디렉션

  13. 13

    EOF의 stdout 리디렉션

  14. 14

    C 프로그램에서 STDOUT을 STDIN으로 리디렉션하는 방법

  15. 15

    명령의`stdin`과`stdout`을 출력으로 리디렉션하는 방법

  16. 16

    bash의 stdin과 stdout을 모두 다른 파일로 리디렉션

  17. 17

    명령의`stdin`과`stdout`을 출력으로 리디렉션하는 방법

  18. 18

    stdin을 stdout으로 리디렉션

  19. 19

    pybind11 print ()에서 Python sys.stdout을 C ++로 리디렉션

  20. 20

    파일 내용을 C의 다른 프로그램으로 리디렉션

  21. 21

    htaccess의 301 리디렉션이 쿼리 문자열을 인식하지 못함

  22. 22

    stdout 및 stderr을 파일로, stderr을 stdout으로 리디렉션

  23. 23

    C-자식 프로세스의 IO 리디렉션

  24. 24

    특정 문자열이있는 URL을 워드 프레스의 다른 URL로 리디렉션하려면

  25. 25

    디렉토리의 내용을 상위 폴더의 다른 디렉토리로 리디렉션

  26. 26

    쿼리 문자열을 기반으로 리디렉션

  27. 27

    쿼리 문자열을 기반으로 .htaccess 리디렉션

  28. 28

    쿼리 문자열을 루트로 리디렉션

  29. 29

    쿼리 문자열을 루트로 리디렉션

뜨겁다태그

보관