2011-07-04 6 views
0

아마도 이것은 명백한 질문 일 것입니다.하지만 저는 여러분에게 묻기 만하면됩니다.파이프를 사용하는 프로세스 간 통신

파이프 시스템 호출을 사용하여 부모 - 자식 프로세스 통신으로 이름없는 파이프를 만드는 중입니다.

내 하위 프로세스는 정보를 모아 부모에게 보냅니다. 내 질문 :

  1. 쓰기 및 읽기 기능을 사용하여 문자열을 보내고받을 수 있습니까? 구조를 보내는 것을 잊어 버려야합니다.
  2. 이전 질문에 대한 답변이 "예"이면 모든 정보를 상위 프로세스로 전송하는 올바른 방법은 함수를 여러 번 읽고 쓰기를 호출하는 것입니다.

대단히 감사합니다.

+0

고맙습니다. 그 일을하는 방법을 보러 갈거야! –

+0

"아버지 과정"을 "부모 과정"으로 변경했습니다. 정치적으로 정확할뿐만 아니라 전문 용어이기도합니다. – aib

답변

2

write()read()struct 일 수 있습니다. 에 대한 포인터를 buf 매개 변수로 사용하십시오. 문제가 발생하는 동일한 시스템에서 실행되지 않는 프로세스와 이식 가능한 마샬링/언 마샬링을 수행해야하는 프로세스 사이에서이 작업을 수행하고자 할 때입니다. 파이프에 패킷 개념이 실제로 없으므로 데이터 "패킷"의 시작과 끝을 인식하는 것이 포함됩니다. 수행하려는 작업이 모두 동일한 struct 시리즈를 작성하는 경우 write()과 독자가 될 수 있습니다 시리즈의 끝을 나타내는 0을 반환하는 read()에 의존 할 수 있습니다. 하지만 다른 정보를 보내야한다면 다음과 같은 내용의 프레이밍 프로토콜이 필요합니다.

+5

또한 다른 내용에 _pointers_를 포함하는'struct's는 전달하기가 어렵습니다. 포인터는 다른 주소 공간에서 아무 것도 의미하지 않습니다. – sarnold

+0

좋아, 링크 된 목록을 지나치는 것이 실제로 의미가 없지, 그렇지? 다른 방법을 사용하는 것이 더 나은가? –

+0

유일한 포인터가 링크 된리스트 포인터라면, 순서대로 (실제로는 링크 된리스트가 아닌 배열로서)'write()'하십시오. 리시버'read()'는 각 엘리먼트에 대해 새로운리스트 엔트리를 할당하고, 그것을 생성 한리스트에 링크시킨다. – geekosaur