부모 프로세스가 각 자식과 개별적으로 통신 할 수있는 방법이 필요합니다.포크 부모 자식 통신
다른 자녀와 별도로 부모와 의사 소통해야하는 자녀가 있습니다.
부모가 각 자녀에게 개인 통신 채널을 가질 수있는 방법이 있습니까?
또한 예를 들어 자식이 struct 변수를 부모에게 보낼 수 있습니까?
저는 이런 종류의 것들에 익숙합니다. 그래서 어떤 도움을 주시면 감사하겠습니다. 이 IPC을 처리하지 않습니다, 당신은
부모 프로세스가 각 자식과 개별적으로 통신 할 수있는 방법이 필요합니다.포크 부모 자식 통신
다른 자녀와 별도로 부모와 의사 소통해야하는 자녀가 있습니다.
부모가 각 자녀에게 개인 통신 채널을 가질 수있는 방법이 있습니까?
또한 예를 들어 자식이 struct 변수를 부모에게 보낼 수 있습니까?
저는 이런 종류의 것들에 익숙합니다. 그래서 어떤 도움을 주시면 감사하겠습니다. 이 IPC을 처리하지 않습니다, 당신은
바로 호출 프로세스를 복제합니다
당신은 아마 발견으로 fork()
자체 (난 그냥 우리가 여기에 리눅스를 이야기하고 가정합니다) 감사드립니다. 포크 매뉴얼에서
:
포크() 호출 프로세스를 복제하여 새로운 프로세스를 생성합니다. 새 프로세스 (하위 프로세스라고 함)는 부모 프로세스라고 불리는 호출 프로세스 인 의 정확한 복제본입니다. 당신이 포크 번) (IPC를 처리 할 수
가장 일반적인 방법은 "각 자녀가있는 전용 COMUNICATION 샤넬"원하는 특히, 파이프를 사용하는 것입니다. 다음은 (반환 값을 확인하지 않습니다)에 pipe
매뉴얼에서 찾을 수있는 것과 유사한 사용의 전형적인 쉬운 예입니다 :
#include <sys/wait.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
int
main(int argc, char * argv[])
{
int pipefd[2];
pid_t cpid;
char buf;
pipe(pipefd); // create the pipe
cpid = fork(); // duplicate the current process
if (cpid == 0) // if I am the child then
{
close(pipefd[1]); // close the write-end of the pipe, I'm not going to use it
while (read(pipefd[0], &buf, 1) > 0) // read while EOF
write(1, &buf, 1);
write(1, "\n", 1);
close(pipefd[0]); // close the read-end of the pipe
exit(EXIT_SUCCESS);
}
else // if I am the parent then
{
close(pipefd[0]); // close the read-end of the pipe, I'm not going to use it
write(pipefd[1], argv[1], strlen(argv[1])); // send the content of argv[1] to the reader
close(pipefd[1]); // close the write-end of the pipe, thus sending EOF to the reader
wait(NULL); // wait for the child process to exit before I do the same
exit(EXIT_SUCCESS);
}
return 0;
}
코드 꽤 자기 설명이다 파이프에
거기에서 원하는 것을 할 수 있습니다. 반환 값을 확인하고 dup
, pipe
, fork
, wait
... 설명서를 읽는 것을 잊지 마십시오.
그들이 당신의 "개인"요구 사항을 충족하지 않지만 그들이 당신을 관심 migh, 또한 프로세스간에 datas를 공유 할 수있는 다른 방법의 무리가 있습니다
또는 전날에 기본적으로 파이프 있습니다
행운을 빈다.
파이프 라인! http://www.gnu.org/software/libc/manual/html_node/Pipes-and-FIFOs.html (포크하기 전에 파이프를 만들어야한다는 것을 기억해야합니다. 그렇지 않으면 통신 할 수 없습니다) –
이것은 플랫폼에 따라 다릅니다. 어떤 플랫폼을 실행할 생각입니까? –