如何使用popen在C ++中打开一个进程而不将输入和输出定向到stdin?

时间:2016-08-08 20:25:40

标签: c++ popen

我正在开发一个交互式程序,它接收来自用户的输入(通过stdin)并相应地输出数据(使用stdout)。程序运行时,我需要打开一个后台应用程序(并在主程序运行时让它继续运行)。我已经使用popen(使用" r"模式)成功完成了这项工作,但有时我会遇到stdin冲突。例如,当用户输入用于主程序的输入时,程序有时会将其视为后台程序的输入。用户永远不必直接与后台程序交互。有没有办法从stdin和stdout完全解耦后台程序的输入和输出,同时仍然能够使用文件描述符读取和写入后台进程?

2 个答案:

答案 0 :(得分:1)

不要使用popen。相反,请使用fork + exec系列函数中的一个,它不会连接io流。

答案 1 :(得分:1)

只需准确编码您需要的内容。 popen函数是一个便利函数,您可以使用它恰好完成您所需要的操作。否则,请使用pipeforkdup2close以及您想要的任何exec - 家庭功能。

您可能会发现查看popen/pclose的一些实现有助于了解它们的工作原理。根据需要进行调整。