Плохой дескриптор файла - PullRequest
       7

Плохой дескриптор файла

0 голосов
/ 08 апреля 2010

Кто-нибудь видит проблему с этим, она не работает, говоря плохой дескриптор файла, не знаю почему?

pipe(pipefd[0]);
if ((opid = fork()) == 0) {
     dup2(pipefd[0][1],1);/*send to output*/
     close(pipefd[0][0]);
     close(pipefd[0][1]);
     execlp("ls","ls","-al",NULL);
}

 if((cpid = fork())==0){
   dup2(pipefd[0][1],0);/*read from input*/
   close(pipefd[0][0]);
   close(pipefd[1][1]);
   execlp("grep","grep",".bak",NULL);
}

  close(pipefd[0][0]);
  close(pipefd[0][1]);

Ответы [ 2 ]

1 голос
/ 08 апреля 2010

На основании вашего кода я предполагаю, что pipefd определен как:

int pipefd[2][2];

Теперь, когда вы делаете:

pipe(pipefd[0])

Это заполняет только pipefd[0][0] и pipefd[0][1].

Итак, когда вы делаете:

# Bad descriptor
close(pipefd[1][1]);

вы ссылаетесь на случайный мусор (вы никогда не устанавливаете pipefd[1][0] или pipefd[1][1]).

Из показанного кода я не понимаю, почему вы не просто делаете:

int pipefd[2];
pipe(pipefd);
0 голосов
/ 08 апреля 2010

Индексы во втором блоке выглядят подозрительно.

...