错误的文件描述符

发布于 2024-08-27 17:21:50 字数 449 浏览 5 评论 0原文

有人看到这个问题吗,它不起作用,说文件描述符错误,不知道为什么?

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]);

Does anyone see a problem with this, its not working saying bad file descriptor not sure why?

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]);

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

轮廓§ 2024-09-03 17:21:50

根据您的代码,我猜测 pipelinefd 被定义为:

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);

Based on your code, I'm guessing pipefd is defined as:

int pipefd[2][2];

Now, when you do:

pipe(pipefd[0])

This only populates pipefd[0][0] and pipefd[0][1].

So when you do:

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

you are referencing random junk (you never set pipefd[1][0] or pipefd[1][1]).

From the code shown, I can't see why you aren't just doing:

int pipefd[2];
pipe(pipefd);
鹿港小镇 2024-09-03 17:21:50

第二个块中的索引看起来很可疑。

The indexes in the second block look suspect.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文