本文介绍了在子调用exec()之后使用管道()的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我的最终目标是让父进程将文本行传递给子进程,然后子进程将文本打印到stdout。当父母获得用户输入并将其传递给孩子时,孩子将在后台"永久"运行。我更喜欢把孩子放在单独的节目里。通过if语句区分Child和paretn简直是胡说八道。
我正在查看管道,但我不确定在子级调用exec()到不同的程序后,管道是否可能在父/子之间进行通信。
这可能吗?如果是这样的话,你有什么例子可以指给我看吗?如果不是,在这种情况下我可以使用什么IPC方法?
推荐答案标准场景是让程序作为子程序执行,而不是管道,而只使用stdin/stdout。您可以通过dup2()将管道的各个末端设置为fd0或1(或同时使用两个管道进行双向通信)来实现这一点,对应于STDIN_FILENO和STDOUT_FILENO。之后,执行您的子程序。
当然,如果您需要将stdin/stdout用于子项中的不同目的,还可以使用其他选项,例如"命名管道"。
不过,如果您自己编写这两部分,您可能需要考虑更简单的解决方案:
通过If语句区分子级和父级是一件乱七八糟的事情。
无论如何,您都必须这样做,至少在连接管道和调用exec()时是这样。只需创建单独的代码文件,并根据需要调用parent_main()和child_main()之类的名称(无论您喜欢怎么称呼它们)。
更多推荐
在子调用exec()之后使用管道()
发布评论