在子调用exec()之后使用管道() [英] Using pipe() after child calls exec()

查看:23
本文介绍了在子调用exec()之后使用管道()的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的最终目标是让父进程将文本行传递给子进程,然后子进程将文本打印到stdout。当父母获得用户输入并将其传递给孩子时,孩子将在后台"永久"运行。我更喜欢把孩子放在单独的节目里。通过if语句区分Child和paretn简直是胡说八道。

我正在查看管道,但我不确定在子级调用exec()到不同的程序后,管道是否可能在父/子之间进行通信。

这可能吗?如果是这样的话,你有什么例子可以指给我看吗?如果不是,在这种情况下我可以使用什么IPC方法?

推荐答案

标准场景是让程序作为子程序执行,而不是管道,而只使用stdin/stdout。您可以通过dup2()将管道的各个末端设置为fd01(或同时使用两个管道进行双向通信)来实现这一点,对应于STDIN_FILENOSTDOUT_FILENO。之后,执行您的子程序。

当然,如果您需要将stdin/stdout用于子项中的不同目的,还可以使用其他选项,例如"命名管道"。

不过,如果您自己编写这两部分,您可能需要考虑更简单的解决方案:

通过If语句区分子级和父级是一件乱七八糟的事情。

无论如何,您都必须这样做,至少在连接管道和调用exec()时是这样。只需创建单独的代码文件,并根据需要调用parent_main()child_main()之类的名称(无论您喜欢怎么称呼它们)。

这篇关于在子调用exec()之后使用管道()的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆