进程间通信中的 stdin 与 STDIN_FILENO

问题描述

我目前正在用 C++ 编写一些代码,其中我有一个生成子进程的主进程(使用 I found here代码)。子进程将通过其标准输入控制。

到目前为止,我得到了一个工作示例,其中子进程是一个 python 脚本,它只是从 stdin 读取然后退出

这是python脚本

#!/usr/bin/env python3

import sys

print("start script")
s = sys.stdin.readline()
print('--> ' + repr(s))
print("done")

写入子进程的ostream后

stdout << "test input data" << std::endl;

python 脚本输出发送数据。按预期工作。

现在我的问题来了。

当我插入我想要控制的真实进程时,它不再工作。在查看 source of the process which i want to control process 时,我发现我的父进程将其数据写入 STDIN_FILENO,但子进程从 fileno(stdin) 读取。我还发现 this post 指出区别仅在于界面,但我如何才能找到?

我当然以交互模式启动孩子,否则它不会接受来自标准输入的输入。

int res = execlp("/usr/bin/aplay","/usr/bin/aplay","--interactive","/home/westranger/music.wav","-v",(char*)NULL);

我可以提供完整的源代码,但在将其发布到此处之前,重构对我来说是相当费力的。请告诉我。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)