UNIX에서 하나의 파이프를 사용하여 C에서 부모와 자식을 동기화하는 방법이 있습니까?

StackOverflow https://stackoverflow.com/questions/1422441

  •  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 개의 제출자)를 만들어야합니다.

다른 팁

단일 파이프에서는 양방향 동기화를 수행 할 수 없습니다.

유닉스 도메인 소켓에서 양방향 동기화를 수행 할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top