Creare più processi figli

di il
30 risposte

30 Risposte - Pagina 3

  • Re: Creare più processi figli

    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);
      }
    
Devi accedere o registrarti per scrivere nel forum
30 risposte