我正在尝试将标准重定向到我的流程要创建的流程中,因此我可以与此流程进行双向通信。
基本上,我正在尝试用C语言完成Python的popen2()。
我无法在此找到任何内容,因为每个人似乎都在他们的示例中使用fork(),这很方便,因为您可以在子项中创建管道,fork,然后使用dup()来更改然而,stdin和stdout,在我的情况下,我不是在分叉,我实际上正在执行一个shell命令,我希望能够与它进行通信。
答案 0 :(得分:1)
如果不分支进程,则无法执行shell命令。它是由系统之类的函数在内部完成的,你应该明确地捕获stdin / stdout。在您之前创建的dup2
中通过pipe
分叉和设置stdin / stdout之后,使用shell调用exec
,使用“-c”参数和shell命令你想分叉。
答案 1 :(得分:0)
有些unix使popen (3)
支持双向管道(包括Mac OS在内的大多数BSD;不知道我的头脑中的Linux),这使得这很容易,但这不是必需的,只有其他支持popen
的一个方向。对于那些您必须使用pipe (2)
,fork
和exec
建立两个单向管道。
答案 2 :(得分:0)
popen(3)是POSIX标准的一部分,在Linux下受支持。但请注意,popen只能创建单向通信(只读或只写)。 popen(3)是管道(2)系统调用的包装器。
如果要在同一描述符上同时执行输入和输出,则进入套接字领域。您可以实现UNIX套接字(本地通信),请参阅unix(7)以获取详细信息 - 手册页中也有适当的C示例,因此我不会在此处重新发布。