Salve ragazzi ho questo esercizio.
Generare 2 processi figli i quali leggeranno un file dato come argomento e scriveranno al padre solo le lettere successive ad una lettera passata come argomento.Successivamente il padre leggerà i caretteri scritti
int main(int argc,char **argv){
char a[1]; // buffer per leggere all'interno del file
pid_t pid[2]; // array per salvare i pid
if (argc < 3){ // controllo delle variabili passate al programma
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){ // apertura del file da leggere
perror("errore nell'apertura del file");
exit(1);
}
if((fd2=open(argv[2],O_WRONLY))<0){ // apertura del file in cui scrivere
perror("errore");
exit(1);
}
if(pipe(filedes)<0){ // crazione della pipe
perror("errore di pipe");
exit(1);
}
for(i=0;i<2;i++){ // ciclo per creare piu figli
pid[i]=fork();
if(pid[i]<0){
perror("errore di fork");
exit(1);
}
else if(pid[i]==0){ // processo figlio
close(filedes[0]);
while((n=read(fd,a,1))>0){ // leggi da file
if(write(STDOUT_FILENO,a,n)<0){ // controlla se la scritura nel buffer è andata a buon fine
perror("errore in lettura");
close(fd);
exit(1);
}
if(a==argv[3]) // controllo se ho trovato la lettera
flag=1;
if(flag==1){ // se il buffer è 1 è il momento di scrivere nella pipe
if(write(filedes[1],a,1)<0){ // controllo sulla scrittura
perror("errore in scrittura");
close (fd);
}
letti++;
}
}
if(write(filedes[1],"letti",5)<0){ // ho scritto che ho finito di leggere
perror("errore in scrittura");
close(fd);
}
printf("questo è il flag %d\n",flag);
flag=0;
exit(0);
}
else if (pid[i]>0){ // processo padre
printf("ok");
if(wait(&status)==-1){ // aspetta i figli
perror("errore per il processo figlio");
close(fd);
exit(1);
}
while((n=read(filedes[0],a,1))>0){ // leggi sulla pipe
if(write(fd2,a,1)<0){
perror("errore in lettura");
exit(1);
}
}
}
}
close (fd2);
printf("FINE");
exit(0);
}