2010-08-14 2 views
1

내 C 프로그램에서 다른 프로그램을 실행해야합니다. 연속적으로 메시지를 (중간 결과)을 stdout에 보내야합니다. 이러한 메시지 (중간 결과)는 exec가 실행을 마치면 (다른 프로그램이 종료 됨) 검색 할 수 있지만 내 문제는 그 exec 명령의 실행이 진행되고 있다면,이 메시지 (중간 결과)를 한 행씩 검색하는 방법은 무엇입니까? 이러한 중간 결과를 기반으로 나는 exec 명령 (다른 프로그램에 입력 제공)에 대한 입력을 제공해야합니다. 어떻게해야합니까?C에서 exec 명령을 실행하는 동안 exec 명령의 중간 결과를 병렬로 읽는 방법?

답변

3

pipe(2)을 참조하십시오. exec을 호출하는 하위 프로세스의 stdin에 입력 파일 설명자를 사용하십시오.

는 파일 기술자를 이동 포크 후 아이에

dup2(my_pipe[0], stdin); 

를 수행합니다.

또는 차오 (Chao)가 제안한대로 popen(3)을 사용하십시오.

+0

나는 비슷한 방법을 사용했다. (stdout 용 파이프 사용) 그러나이 경우 exec 명령이 완료되면 (다른 프로그램 실행이 끝났을 때) 파이프에서 읽을 수 있지만 exec 명령을 실행하는 동안 중간 결과를 병렬로 검색 할 수는 없다. 실행은 – joseph

+0

@joseph로 진행됩니다. 부모 프로세스가'exec'd 프로세스에 정보를 보내고받을 수 있도록 프로세스를 포크해야합니다. 아니면 내가 너를 오해하고 있니? – strager

+0

자식 프로세스에서 자식 프로세스에서 fork()를 사용하여 파이프를 사용하여 stdout (dup2 (my_pipe [1], stdout);)을 exec 명령 으로 실행하고 상위 프로세스에서 중간 결과를 루프에서 읽는 중 디버깅하는 동안 my_pipe [0]에 대한 읽기 명령 사용) 내가 찾은 그 읽기는 어떤 임무를 끝내기 전까지는/P는주지 않는다 (임원이 완료되지 않은 경우 읽기 명령에 차단된다)하지만 나는이 중간 결과를 병렬로 필요로한다. exec가이 중간 결과를 제공합니다.) – joseph

4

popen(3)은 프로그램의 출력을 읽는 데 사용할 수있는 FILE*을 다시 제공하는 프로그램을 시작합니다.

관련 문제