Ciao a tutti,
in questi giorni sto svolgendo un esercizio sulla comunicazione tra processi con pipes, il cui testo è il seguente (scusate l'inglese):
Write a program which creates three child process P1, P2 and P3, and pipes between the processes.
Then P1 is to write a message to P2 who passes it to P3 who then passes it to P1, and so on.
Each time P1 receives the message he changes it.
Ho provato a svolgerlo in questo modo, ma mi dicono che è sbagliato.
Potreste darmi una mano? Grazie in anticipo!
codice:#include <stdio.h> int main() { int fdes[2]; // prima pipe int fdes2[2]; // seconda pipe int fdes3[2]; // terza pipe int pid; // usato per controllo nel fork int pid2; // usato per controllo nel fork int pid3; // usato per controllo nel fork char *messaggio = "sis" ; // primo messaggio char *messaggio2 = "op"; // secondo messaggio int i=0; char singolo; // singolo carattere char buffer1[5]; // buffer tra processi char buffer2[6]; // buffer tra processi char buffer3[7]; // buffer tra processi pipe(fdes); // creazione prima pipe pipe(fdes2); // creazione seconda pipe pipe(fdes3); // creazione terza pipe pid=fork(); // processo A if(pid != 0) // se è il padre { wait(); //aspetto close(fdes[1]); // chiudo la pipe fdes in scrittura poichè prima devo leggere while (singolo !='\0') { // fino a che non ho letto tutto il messaggio singolo = read(fdes[0],1,sizeof(char)) ; // leggo ogni carattere buffer1[i] = singolo; // metto il carattere letto nel buffer i = i + 1; // incremento il contatore per cambiare l 'indice del buffer } // ora che ho letto il mio messaggio apro la pipe in scrittura verso il secondo processo open(fdes[1]); // pipe fdes aperta in scrittura. posso quindi passare il messaggio a B pid2=fork(); // processo B if(pid2 != 0) // se è il padre { wait(); //aspetto close(fdes2[1]); // chiudo la pipe fdes2 in scrittura poichè prima devo leggere while (singolo !='\0') { // fino a che non ho letto tutto il messaggio singolo = read(fdes2[0],1,sizeof(char)) ; // leggo carattere per carattere buffer2[i] = singolo; // metto il carattere letto nel buffer i = i + 1; // incremento il contatore per cambiare l 'indice del buffer } open(fdes2[1]); // pipe fdes2 aperta in scrittura. posso quindi passare il messaggio a C pid3=fork(); // processo C if(pid3 != 0) // se è il padre { wait(); //aspetto close (fdes3[1]); // chiudo la pipe fdes3 in scrittura poichè prima devo leggere while (singolo !='\0') { // finchè non ho letto tutto il messaggio singolo = read(fdes3[0],1,sizeof(char)) ; // leggo ogni carattere buffer3[i] = singolo; // metto il carattere letto nel buffer i = i + 1; // incremento il contatore per cambiare l 'indice del buffer } open(fdes3[1]); // pipe fdes3 aperta in scrittura verso A *messaggio = *messaggio2; // cambio il messaggio } else // sono nel proc C { write(fdes3[1],buffer2,sizeof(buffer2)); } } else // sono nel processo B { write(fdes2[1],buffer1,sizeof(buffer1)); } } else //sono nel processo A { write(fdes[1],messaggio,sizeof(messaggio)); } }

Rispondi quotando
