是否可以在一个进程中保持标准输出完整,但仍然有一个通向第二个进程的管道?

发布于 2024-12-17 04:32:16 字数 451 浏览 0 评论 0原文

我正在尝试为程序制作一个记录器。因此,我有第二个子进程,它通过管道并使用 tee 获取父进程的 stdout。贝娄就是一个例子。

if (fork()>0){      //parent

  close(1);
  dup(pip[1]);
  close(pip[0]);

  char a[100]="";
  while (1){
    gets(a);
    puts(a);
  }

} else {           //child

  close(0);
  dup(pip[0]);
  close(pip[1]);

  execlp("tee", "tee", NULL);

}

这很好用。子级使用管道打印我在父级中输入的任何内容。

但是,是否可以让父级发送到 stdout,同时发送到管道?

I am trying to make a logger for a program. For that reason I am having a second child process that is getting the parent's stdout via a pipe and using tee. Bellow is an example.

if (fork()>0){      //parent

  close(1);
  dup(pip[1]);
  close(pip[0]);

  char a[100]="";
  while (1){
    gets(a);
    puts(a);
  }

} else {           //child

  close(0);
  dup(pip[0]);
  close(pip[1]);

  execlp("tee", "tee", NULL);

}

This works fine. The child prints whatever I type in the parent using the pipe.

However is it possible to have the parent sending to stdout while simultaneously sending to the pipe?

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

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

发布评论

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

评论(1

九歌凝 2024-12-24 04:32:16

查看“write”的手册页,然后您可以保持标准输出打开并写入两个管道:

while(1){
   gets(a)
   write(pip[1], a, len(a))
   puts(a)
}

尽管您确实应该检查返回值和所有内容。

Check out the man page for "write", then you can leave stdout open and write to both the the pipes:

while(1){
   gets(a)
   write(pip[1], a, len(a))
   puts(a)
}

Although you really ought to be checking your return values and all.

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