UNIX에서 하나의 파이프를 사용하여 C에서 부모와 자식을 동기화하는 방법이 있습니까?
-
07-07-2019 - |
문제
부모와 자녀가 글을 쓰고 읽기 위해 하나의 파이프를 사용한다고 가정하면 다른 사람 만 읽을 때만 읽을 때만 읽습니다. 할 수있는 방법이 있습니까? 나는 수면 기능으로 그것을 시도했지만 인종 조건으로 인해 올바른 출력을 제공하지 않습니다. 이것은 내 코드입니다
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <unistd.h>
#define MSGSIZE 16
main ()
{
int i;
char *msg = "How are you?";
char inbuff[MSGSIZE];
int p[2];
pid_t ret;
pipe (p);
ret = fork ();
if (ret > 0)
{
i = 0;
while (i < 10)
{
write (p[1], msg, MSGSIZE);
sleep (2);
read (p[0], inbuff, MSGSIZE);
printf ("Parent: %s\n", inbuff);
i++;
}
exit(1);
}
else
{
i = 0;
while (i < 10)
{
sleep (1);
read (p[0], inbuff, MSGSIZE);
printf ("Child: %s\n", inbuff);
write (p[1], "i am fine", strlen ("i am fine"));
i++;
}
}
exit (0);
}
해결책
파이프 ()는 두 개의 제출자를 만듭니다. 하나는 읽기 용으로, 다른 하나는 쓰기 용입니다. 양방향 통신의 경우 두 개의 파이프 (4 개의 제출자)를 만들어야합니다.
다른 팁
단일 파이프에서는 양방향 동기화를 수행 할 수 없습니다.
유닉스 도메인 소켓에서 양방향 동기화를 수행 할 수 있습니다.
제휴하지 않습니다 StackOverflow