2016-09-28 6 views
0

fork()와 execl()을 사용하여 "child"라는 다른 프로그램을 실행하는 "parent"라는 프로그램이 있다고 가정 해 봅시다. 이 두 프로그램 사이의 커뮤니케이션. 이 통신을 유지하는 가장 좋은 방법은 이름없는 파이프를 사용하는 것입니다. "부모"프로그램 측면에서 요구 사항에 대한 문서와 예제를 쉽게 찾을 수 있지만 "아동"측면에서 동일한 것을 발견 할 수는 없습니다.forked 하위 프로그램의 필수 항목

예를 들어,이 가이드는 좋지만 프로그램에서 whith exec를 시작한 프로그램에서 수행해야 할 것을 보여주지는 않습니다. 두 프로그램간에 통신이 가능하려면 "부모"프로그램에서 dup()을 사용해야합니다. 기술자를 공유하지만 난 아이 측에서 제대로 파이프를 참조 않는 자 기사에서 모두? http://tldp.org/LDP/lpg/node11.html

답변

1

bettwen 통신을 설정하기 위해, 자식 프로세스는 dupdup2이 (dup2이 더 낫다)를 설정하는 데 사용 파일 설명자 중 하나를 표준 입력으로 사용합니다.
프로세스는 표준 출력과 비슷합니다 (별도의 pipe 및 관련 파일 설명자가 필요합니다).

부모는 파이프의 끝을 읽고 쓰면 자녀의 stdio와 통신 할 수 있습니다.

자식이 exec 인 경우 이러한 파일 설명자가 상속되므로 동일한 파이프 끝 점이 자식 프로세스의 표준 입력 및 출력으로 유지됩니다. 이 기사처럼 dup/dup2로 파일 디스크립터를 설정 한 경우 즉

, 당신이 exec 에드 과정에서 특별한 작업을 수행 할 필요가 없습니다, 당신은 단지 읽고 표준 입출력에 쓸 수 있습니다.

+0

내가 완전히 이해하는지 잘 모르겠다. 자식 프로세스가 부모와 통신 할 수 있다면'printf'와'scanf'만으로 통신 할 수 있다는 의미인가요? – kroketor

+1

@kroketor 예, 링크 된 페이지의 "dup"사용 예제의 요점입니다. – molbdnilo