我正在开发一个交互式程序,它接收来自用户的输入(通过stdin)并相应地输出数据(使用stdout)。程序运行时,我需要打开一个后台应用程序(并在主程序运行时让它继续运行)。我已经使用popen(使用" r"模式)成功完成了这项工作,但有时我会遇到stdin冲突。例如,当用户输入用于主程序的输入时,程序有时会将其视为后台程序的输入。用户永远不必直接与后台程序交互。有没有办法从stdin和stdout完全解耦后台程序的输入和输出,同时仍然能够使用文件描述符读取和写入后台进程?
答案 0 :(得分:1)
不要使用popen
。相反,请使用fork
+ exec
系列函数中的一个,它不会连接io流。
答案 1 :(得分:1)
只需准确编码您需要的内容。 popen
函数是一个便利函数,您可以使用它恰好完成您所需要的操作。否则,请使用pipe
,fork
,dup2
,close
以及您想要的任何exec
- 家庭功能。
您可能会发现查看popen/pclose的一些实现有助于了解它们的工作原理。根据需要进行调整。