c - pipe: Bad file descriptor -


i'm trying implement simpel c shell pipeline arbitrary number of commands. here relevant loop:

int status; int i,j,inputfile,outputfile,pid; int pipenum = info->pipenum;  struct commandtype *command;  int pipes[pipenum * 2]; for(i=0;i<pipenum;i++){   pipe(pipes+2*i);   printf("pipe number %d created\n", i+1); } for(j=0;j<=pipenum;j++){   if( ( pid=fork() ) ==0 ){     if(j!=0){        if(dup2(pipes[(j-1)*2],stdin_fileno)<0){       perror("pipe");       exit(2);       }     }     if(j!=pipenum){       if(dup2(pipes[2*j+1],stdout_fileno)<0){       perror("pipe");       exit(2);       }     }     if(j==0 && info->boolinfile==1){       if((inputfile = open(info->infile,o_rdonly))<0){     perror("file");     exit(2);       }       if(dup2(inputfile,stdin_fileno)<0){       perror("dup2");       exit(2);       }     }     if(j==pipenum && info->booloutfile){       if((outputfile = open(info->outfile,o_wronly | o_creat | o_trunc, 666)<0)){     perror("file");     exit(2);       }        if(dup2(outputfile,stdout_fileno)<0){       perror("dup2");       exit(2);       }     }     for(i=0;i<pipenum*2;i++){       close(pipes[i]);       }     command=&info->commarray[j];     execvp(command->varlist[0],command->varlist);     perror("bad command");   }   for(i=0;i<pipenum*2;i++){     close(pipes[i]);   }   for(i=0;i<pipenum+1;i++){     wait(&status);   } } 

but when try run command

cat file.txt | wc 

i following error:

pipe: bad file descriptor.  

does see flaw in code here? can't figure out save life.

i have added print line statements , bad file descriptor every single pipe. ugh.

the bad lines of code @ end of loop. instead of

  }   for(i=0;i<pipenum*2;i++){     close(pipes[i]);   }   for(i=0;i<pipenum+1;i++){     wait(&status);   } } 

i should have

  }     }  for(i=0;i<pipenum*2;i++){     close(pipes[i]); } for(i=0;i<pipenum+1;i++){     wait(&status); } 

Comments

Popular posts from this blog

amazon web services - S3 Pre-signed POST validate file type? -

c# - Check Keyboard Input Winforms -