C++ 如何在C++;使用popen而不将输入和输出定向到stdin?

C++ 如何在C++;使用popen而不将输入和输出定向到stdin?,c++,popen,C++,Popen,我正在开发一个交互式程序,它接收用户的输入(通过stdin)并相应地输出数据(使用stdout)。当程序运行时,我需要打开一个后台应用程序(并在主程序运行时保持它运行)。我使用popen(使用“r”模式)成功地做到了这一点,但是有时我会遇到stdin冲突。例如,当用户输入用于主程序的输入时,有时程序会将其视为后台程序的输入。用户不应该直接与后台程序交互。有没有一种方法可以将后台程序的输入和输出与stdin和stdout完全解耦,同时仍然能够使用文件描述符对后台进程进行读写?只是不要使用popen

我正在开发一个交互式程序,它接收用户的输入(通过stdin)并相应地输出数据(使用stdout)。当程序运行时,我需要打开一个后台应用程序(并在主程序运行时保持它运行)。我使用popen(使用“r”模式)成功地做到了这一点,但是有时我会遇到stdin冲突。例如,当用户输入用于主程序的输入时,有时程序会将其视为后台程序的输入。用户不应该直接与后台程序交互。有没有一种方法可以将后台程序的输入和输出与stdin和stdout完全解耦,同时仍然能够使用文件描述符对后台进程进行读写?

只是不要使用
popen
。相反,使用
fork
+一个不连接io流的
exec
函数系列。

只是不要使用
popen
。相反,请使用
fork
+一个
exec
函数系列,该系列函数不连接io流。

只需编写您需要的代码即可。
popen
函数是一个方便的函数,您可以使用它来精确地执行您需要的操作。否则,请使用
pipe
fork
dup2
close
,以及所需的任何
exec
-系列函数


您可能会发现查看的一些实现以了解它们是如何工作的很有帮助。根据需要进行调整。

只需准确编写所需代码即可。
popen
函数是一个方便的函数,您可以使用它来精确地执行您需要的操作。否则,请使用
pipe
fork
dup2
close
,以及所需的任何
exec
-系列函数

您可能会发现查看的一些实现以了解它们是如何工作的很有帮助。根据需要进行调整。

当您使用
popen()
时,您可以读取或写入,但不能同时读取或写入。您是如何编写后台程序的?呃,这就是
popen()
的用途。如果你不想那样,就不要用它。但似乎您真正需要的是读写模式下的
popen()
,这样目标进程的
stdin
就会被重定向,远离控制台。当您使用
popen()
时,您既可以读也可以写,而不是两者都可以。您是如何编写后台程序的?呃,这就是
popen()
的用途。如果你不想那样,就不要用它。但似乎您真正需要的是读写模式下的
popen()
,这样目标进程的
stdin
就会被重定向,远离控制台。