Salve a tutti,
sto studiando le pipe e su internet si trova spesso l'esempio base che tratta il passaggio di uno stringa tra padre e figlio.
La teoria dice che, se tutti i lati lettura sono chiusi, quando faccio una write ricevo un segnale SIGPIPE... se leggo con tutti i lati scrittura chiusi la read ritorna zero. Riporto il seguente esempio trovato su internet:
Supponiamo che parta prima il processo figlio: costui chiude il lato lettura, scrive sulla pipe ed infine chiude il lato scrittura. A questo punto il processo padre chiude il lato scrittura prima di leggere. La read perchè funziona? Teoricamente dovrebbe restituire zero in quanto nel momento della lettura tutti i lati della scrittura sono stati chiusi(uno dal padre ed uno dal figlio) per cui non ci sono processi scrittura. Non riesco a capire perchè questo codice funziona correttamente.codice:#include <stdio.h> #define READ 0 #define WRITE 1 char *phrase = "Stuff this in your pipe"; int main (void) { int fd [2], bytesRead; char message [100]; pipe (fd); if (fork () == 0) { /* Child, writer */ close(fd[READ]); /* Close unused end */ write (fd[WRITE], phrase, strlen (phrase) + 1); /* include \0 */ close (fd[WRITE]); /* Close used end */ } else { /* Parent, reader*/ close (fd[WRITE]); /* Close unused end */ bytesRead = read (fd[READ], message, 100); printf ("Read %d bytes: %s\n", bytesRead, message); close (fd[READ]); /* Close used end */ } }
Grazie

Rispondi quotando