Esiste un modo per sincronizzare padre e figlio in C usando una pipe in Unix?
-
07-07-2019 - |
Domanda
Supponiamo che sia il genitore che il figlio utilizzino una pipe per scrivere e leggere significa che quando si scrive e poi si legge solo un'altra lettura, altrimenti si blocca. c'è qualche modo per farlo? Ho provato a farlo con la funzione sleep ma a causa delle condizioni di gara, non dà il risultato corretto. Questo è il mio codice
#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);
}
Soluzione
La pipe () crea due descrittori di file, uno per la lettura e l'altro per la scrittura. Per la comunicazione bidirezionale, è necessario creare due pipe (quattro descrittori di file).
Altri suggerimenti
Non è possibile eseguire la sincronizzazione bidirezionale su una singola pipe.
È possibile eseguire la sincronizzazione bidirezionale su un socket di dominio Unix.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow