mit einem Rohr in Unix Gibt es eine Möglichkeit Eltern und Kind in C zu synchronisieren?

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

  •  07-07-2019
  •  | 
  •  

Frage

Angenommen, beide Eltern und Kind ein Rohr zum Schreiben verwenden und Lesemittel, wenn man schreibt dann nur andere lesen sonst blockiert. Gibt es eine Möglichkeit, es zu tun? Ich versuchte es mit Schlaffunktion zu tun, aber auf Grund der Rasse Bedingungen, ist es nicht die richtige Ausgabe geben. Dies ist mein Code

#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);
}
War es hilfreich?

Lösung

Das Rohr () erzeugt zwei FileDescriptor, einen zum Lesen und eine weitere für das Schreiben. Zwei-Wege-Kommunikation, müssen Sie zwei Rohre (vier filedescriptors) erstellen.

Andere Tipps

Sie können nicht tun, bi-direktionale Synchronisation auf einem einzigen Rohr.

Sie können tun, bi-direktionale Synchronisation auf einem Unix-Domain-Socket.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top