Advertisement
Guest User

magheggio allucinante

a guest
Jul 23rd, 2014
186
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <unistd.h>
  4. #include <stdlib.h>
  5. #include <error.h>
  6. #include <sys/types.h>
  7.  
  8. int main(int argc, char **argv){
  9.     int p[3][2], pid, i, count[3] = {0};
  10.     FILE *f[4]; // array di files
  11.     char buf[3][10];    // array di stringhe, una per ogni stringa inviata da un figlio
  12.     if(argc != 4){
  13.         puts("non hai inserito 4 argomenti...e questo non si fa!!1!");
  14.         exit(-1);
  15.     }
  16.     for(i = 0; i < 3; i++)      // creo le tre pipes
  17.         pipe(p[i]);
  18.     for(i = 0; i < 3; i++){
  19.         pid = fork();   // creo tre processi figlio, uno ad ogni iterazione
  20.         if(pid == 0){
  21.             close(p[i][0]);
  22.             f[i] = fopen(argv[i],"r");  // apro in lettura il file relativo all'i-esimo figlio
  23.             while(count[i] < 3){    // conto fino a 3...
  24.                 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
  25.                 count[i]++;
  26.             }
  27.             fclose(f[i]);
  28.         }
  29.     }
  30.     wait(NULL); // siamo nel processo padre; a questo punto aspettiamo un attimo i figli
  31.     for(i = 0; i < 3; i++)
  32.         close(p[i][1]);     // chiudo i canali in scrittura delle tre pipes
  33.     for(i = 0; i < 3; i++)
  34.         read(p[i][0],buf[i],3);     // leggo le tre stringhe
  35.     if(strcmp(buf[1],buf[2]) && strcmp(buf[2],buf[3])){     // se sono uguali, copincollo le stringhe di tre caratteri nel 4° file
  36.         puts("I tre caratteri inviati dai figli ai padri sono uguali per tutti.");
  37.         f[4] = fopen(argv[4],"w");
  38.         fprintf(f[4],"%s %s %s", buf[1],buf[2],buf[3]);
  39.     }
  40.     else
  41.         puts("I tre caratteri inviati dai figli ai padri non sono uguali per tutti.");
  42.     return 0;
  43. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement