在子调用exec()之后使用管道()

人气:952 发布:2022-10-16 标签: ipc parent-child pipe c exec

问题描述

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

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

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

推荐答案

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

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

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

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

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

717