in pratica apro un file e dopo aver creato due processi,faccio leggere sul file e solo dopo aver trovato un carattere salvato nella variabile argv[3] inizio a scrivere nella pipe. il processo padre dovrà leggere tutti i caratteri e quanti caratteri sono stati letti.
Codice: Seleziona tutto
#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];
pid_t pid[2];
if (argc < 3){
perror("errore nel passaggio di parametri");
exit(1);
}
int filedes[2],fd,fd2,n,flag=1,i=0,letti=0,status;
if((fd=open(argv[1],O_RDONLY))<0){
perror("errore nell'apertura del file");
exit(1);
}
if((fd2=open(argv[2],O_WRONLY))<0){
perror("errore");
exit(1);
}
if(pipe(filedes)<0){
perror("errore di 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){
close(filedes[0]);
while((n=read(fd,a,1))>0){
if(write(STDOUT_FILENO,a,n)<0){
perror("errore in lettura");
close(fd);
exit(1);
}
if(a==argv[3])
flag=1;
if(flag==1){
if(write(filedes[1],a,1)<0){
perror("errore in scrittura");
close (fd);
}
letti++;
}
}
if(write(filedes[1],"letti",5)<0){
perror("errore in scrittura");
close(fd);
}
printf("questo è il flag %d\n",flag);
exit(0);
}
else if (pid[i]>0){
if(wait(&status)==-1){
perror("errore per il processo figlio");
close(fd);
exit(1);
}
while((n=read(filedes[0],a,1))>0){
if(write(fd2,a,1)<0){
perror("errore in lettura");
exit(1);
}
}
}
}
close (fd2);
printf("FINE");
exit(0);
}