Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <unistd.h>
- #include <sys/types.h>
- #include <sys/stat.h>
- #include <fcntl.h>
- #include <errno.h>
- int main(int argc, char **argv){
- if(argc!=4){
- printf("Attenzione, numero di parametri errato!\n");
- exit(1);
- }
- pid_t p1,p2;
- int pipe1[2], pipe2[2];
- int fd1,fd2,fd3;
- char buffer[3],buffer2[2];
- char c,c2;
- fd1=open(argv[1],O_RDONLY);
- if(fd1<0){
- printf("Errore apertura primo file!\n");
- exit(1);
- }
- fd2=open(argv[2],O_RDONLY);
- if(fd2<0){
- printf("Errore apertura secondo file!\n");
- exit(1);
- }
- fd3=open(argv[3],O_WRONLY|O_CREAT);
- if(fd3<0){
- printf("Errore apertura terzo file!\n");
- exit(1);
- }
- if(pipe(pipe1)<0){
- printf("Errore creazione prima pipe!\n");
- exit(1);
- }
- if(pipe(pipe2)<0){
- printf("Errore creazione seconda pipe!\n");
- exit(1);
- }
- p1=fork();
- if(p1<0){
- printf("Errore creazione primo figlio! \n");
- exit(1);
- }
- p2=fork();
- if(p2<0){
- printf("Errore creazione primo figlio! \n");
- exit(1);
- }
- if(p1==0){
- close(pipe2[1]);close(pipe1[0]);close(pipe1[1]);
- while(read(pipe2[0],buffer2,2)>0){
- write(fd3,buffer2,2);
- }
- close(pipe2[0]);
- }
- else{
- if(p2==0){
- close(pipe2[0]);close(pipe1[1]);
- while(read(pipe1[0],&c,1)==1){
- //printf("Figlio2 legge %c dal padre \n",c);
- read(fd2,&c2,1);
- //printf("Figlio2 legge %c dal suo file \n",c2);
- if(c2!=c){
- //printf("I due caratteri sono diversi, quindi li passa a figlio1. \n");
- write(pipe2[1],&c,1);
- write(pipe2[1],&c2,1);
- }
- }
- close(pipe2[1]);close(pipe1[0]);
- }
- else{
- close(pipe1[0]);close(pipe2[1]);close(pipe2[0]);
- while(read(fd1,buffer,3)==3){
- //printf("Padre legge %s \n", buffer);
- write(pipe1[1],buffer,3);
- }
- close(pipe1[1]);
- }
- }
- }
Add Comment
Please, Sign In to add comment