C를 사용하여 다른 프로세스의 출력을 어떻게 캡처할 수 있습니까?

StackOverflow https://stackoverflow.com/questions/646868

  •  22-07-2019
  •  | 
  •  

문제

순수 C를 사용하여 다른 프로세스의 출력을 어떻게 캡처할 수 있습니까?샘플 코드를 제공할 수 있나요?

편집하다:리눅스를 가정해보자.나는 "매우 이식성이 뛰어난" 코드에 관심이 있습니다.내가 원하는 것은 명령을 실행하고 출력을 캡처하여 어떤 방식으로든 처리하는 것뿐입니다.

도움이 되었습니까?

해결책

몇 가지 옵션이 있지만 플랫폼에 따라 다소 다릅니다.그 말은 popen 대부분의 장소에서 작동해야 합니다.

#include <stdio.h>

FILE *stream;
stream = popen("acommand", "r");

/* use fread, fgets, etc. on stream */

pclose(stream);

이는 매우 특정한 용도로 사용되며 다음 명령을 실행하여 프로세스를 생성합니다. acommand 스트림을 통해 프로그램에서 액세스할 수 있도록 하는 방식으로 표준 출력을 첨부합니다. FILE*.

기존 프로세스에 연결해야 하거나 더 풍부한 작업을 수행해야 하는 경우 다른 시설을 조사해야 할 수도 있습니다.Unix에는 프로세스 stdout 등을 연결하는 다양한 메커니즘이 있습니다.

창 아래에서 다음을 사용할 수 있습니다. CreateProcess 새로운 프로세스를 생성하고 표준 출력 핸들을 원하는 것에 연결하는 API입니다.윈도우도 지원 popen.

하지만 제가 아는 한 이를 수행하는 일반적인 C 방법은 없으므로 항상 플랫폼별 API에 어느 정도 의존하게 됩니다.

수정사항을 바탕으로 popen 이상적으로 보입니다. "매우 이식 가능"합니다. OS와 같은 Unix가 없으면 실제로 Single Unix 사양의 일부입니다. POSIX, 원하는 것을 정확히 수행하고, 프로세스를 실행하고, 출력을 가져와 처리할 수 있습니다.

다른 팁

시스템 파이프를 사용할 수 있다면 다른 프로세스의 출력을 C 프로그램에 파이프하고 C 프로그램에서 표준 입력을 읽으십시오.

otherprocess | your_c_program

어떤 OS를 사용하고 있습니까? on *nix type os 프로세스 인 경우 stdout 또는 stderr로 출력하는 경우 파이프를 사용할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top