Completato!
#include <sys/types.h>
#include<sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>
#include <errno.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
int main(int argc,char **argv){
char a[1],b[1];
pid_t pid[2];
if (argc < 3){
perror("errore nel passaggio di parametri");
exit(1);
}
int filedes[2],filedes2[2],fd,fd2,fd3,n,flag=0,i=0,j=0,letti=0,status;
if((fd=open(argv[1],O_RDONLY))<0){
perror("errore nell'apertura del file");
exit(1);
}
if((fd3=open(argv[2],O_RDONLY))<0){
perror("errore");
exit(1);
}
if((fd2=open(argv[3],O_WRONLY))<0){
perror("errore");
exit(1);
}
if(pipe(filedes)<0){
perror("errore della seconda pipe");
exit(1);
}
if(pipe(filedes2)<0){
perror("errore della seconda pipe");
exit(1);
}
for(i=0;i<2;i++){
pid[i]=fork();
if(pid[i]<0){
perror("errore di fork");
exit(1);
}
else if(pid[i]==0){
if(i==0){
while((n=read(fd,a,1))>0){
if(write(STDOUT_FILENO,a,n)<0){
perror("errore in lettura");
close(fd);
exit(1);
}
if(strcmp(a,argv[4])>0)
flag=1;
if(flag==1){
if(write(filedes[1],a,1)<0){
perror("errore in scrittura");
close (fd);
}
letti++;
}
}
}
else{
while((n=read(fd3,a,1))>0){
if(write(STDOUT_FILENO,a,n)<0){
perror("errore in lettura");
close(fd);
exit(1);
}
if(strcmp(a,argv[4])>0)
flag=1;
if(flag==1){
if(write(filedes2[1],a,1)<0){
perror("errore in scrittura");
close (fd);
}
letti++;
}
}
}
flag=0;
exit(0);
}
else if (pid[i]>0){
wait (&status);
/*
if(waitpid(pid[i],&status)<0){
perror("errore di wait");
exit(1);
}
*/
if(i==0){
close(filedes[1]);
while((n=read(filedes[0],a,1))>0){
if(write(fd2,a,n)<0){
perror("errore in lettura");
exit(1);
}
}
}
else{
close(filedes2[1]);
while((n=read(filedes2[0],b,1))>0){
if(write(STDIN_FILENO,b,n)<0){
perror("errore in lettura");
exit(1);
}
}
}
}
}
/*
for(j=0;j<2;j++){
wait(&status);
*/
printf("FINE");
exit(0);
}