有没有人看到这个问题,它的工作说错误的文件描述符不确定原因?
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]);
答案 0 :(得分:1)
根据你的代码,我猜测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);
答案 1 :(得分:0)
第二个区块中的索引看起来很可疑。