luca_mazz1

es3_LSO

Mar 6th, 2018
58
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.79 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <unistd.h>
  4. #include <sys/types.h>
  5. #include <sys/stat.h>
  6. #include <fcntl.h>
  7. #include <errno.h>
  8.  
  9. int main(int argc, char **argv){
  10.     if(argc!=4){
  11.         printf("Attenzione, numero di parametri errato!\n");
  12.         exit(1);
  13.     }
  14.     pid_t p1,p2;
  15.     int pipe1[2], pipe2[2];
  16.     int fd1,fd2,fd3;
  17.     char buffer[3],buffer2[2];
  18.     char c,c2;
  19.     fd1=open(argv[1],O_RDONLY);
  20.     if(fd1<0){
  21.         printf("Errore apertura primo file!\n");
  22.         exit(1);
  23.     }
  24.     fd2=open(argv[2],O_RDONLY);
  25.     if(fd2<0){
  26.         printf("Errore apertura secondo file!\n");
  27.         exit(1);
  28.     }
  29.     fd3=open(argv[3],O_WRONLY|O_CREAT);
  30.     if(fd3<0){
  31.         printf("Errore apertura terzo file!\n");
  32.         exit(1);
  33.     }
  34.     if(pipe(pipe1)<0){
  35.         printf("Errore creazione prima pipe!\n");
  36.         exit(1);
  37.     }
  38.     if(pipe(pipe2)<0){
  39.         printf("Errore creazione seconda pipe!\n");
  40.         exit(1);
  41.     }
  42.     p1=fork();
  43.     if(p1<0){
  44.         printf("Errore creazione primo figlio! \n");
  45.         exit(1);
  46.     }
  47.     p2=fork();
  48.     if(p2<0){
  49.         printf("Errore creazione primo figlio! \n");
  50.         exit(1);
  51.     }
  52.     if(p1==0){
  53.         close(pipe2[1]);close(pipe1[0]);close(pipe1[1]);
  54.         while(read(pipe2[0],buffer2,2)>0){
  55.             write(fd3,buffer2,2);
  56.         }
  57.         close(pipe2[0]);
  58.     }
  59.     else{
  60.         if(p2==0){
  61.             close(pipe2[0]);close(pipe1[1]);
  62.             while(read(pipe1[0],&c,1)==1){
  63.                 //printf("Figlio2 legge %c dal padre \n",c);
  64.                 read(fd2,&c2,1);
  65.                 //printf("Figlio2 legge %c dal suo file \n",c2);
  66.                 if(c2!=c){
  67.                     //printf("I due caratteri sono diversi, quindi li passa a figlio1. \n");
  68.                     write(pipe2[1],&c,1);
  69.                     write(pipe2[1],&c2,1);
  70.                 }
  71.             }
  72.             close(pipe2[1]);close(pipe1[0]);
  73.  
  74.         }
  75.         else{
  76.             close(pipe1[0]);close(pipe2[1]);close(pipe2[0]);
  77.             while(read(fd1,buffer,3)==3){
  78.                 //printf("Padre legge %s \n", buffer);
  79.                 write(pipe1[1],buffer,3);
  80.             }
  81.             close(pipe1[1]);
  82.         }
  83.     }
  84. }
Add Comment
Please, Sign In to add comment