Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <string.h>
- #include <unistd.h>
- #include <stdlib.h>
- #include <error.h>
- #include <sys/types.h>
- int main(int argc, char **argv){
- int p[3][2], pid, i, count[3] = {0};
- FILE *f[4]; // array di files
- char buf[3][10]; // array di stringhe, una per ogni stringa inviata da un figlio
- if(argc != 4){
- puts("non hai inserito 4 argomenti...e questo non si fa!!1!");
- exit(-1);
- }
- for(i = 0; i < 3; i++) // creo le tre pipes
- pipe(p[i]);
- for(i = 0; i < 3; i++){
- pid = fork(); // creo tre processi figlio, uno ad ogni iterazione
- if(pid == 0){
- close(p[i][0]);
- f[i] = fopen(argv[i],"r"); // apro in lettura il file relativo all'i-esimo figlio
- while(count[i] < 3){ // conto fino a 3...
- write(p[i][1],fgetc(f[i]),1); // ...e leggo un carattere per volta e lo dò al padre tramite il canale in scrittura della pipe sempre dell'i-esimo figlio
- count[i]++;
- }
- fclose(f[i]);
- }
- }
- wait(NULL); // siamo nel processo padre; a questo punto aspettiamo un attimo i figli
- for(i = 0; i < 3; i++)
- close(p[i][1]); // chiudo i canali in scrittura delle tre pipes
- for(i = 0; i < 3; i++)
- read(p[i][0],buf[i],3); // leggo le tre stringhe
- if(strcmp(buf[1],buf[2]) && strcmp(buf[2],buf[3])){ // se sono uguali, copincollo le stringhe di tre caratteri nel 4° file
- puts("I tre caratteri inviati dai figli ai padri sono uguali per tutti.");
- f[4] = fopen(argv[4],"w");
- fprintf(f[4],"%s %s %s", buf[1],buf[2],buf[3]);
- }
- else
- puts("I tre caratteri inviati dai figli ai padri non sono uguali per tutti.");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement