如何在不将输入和输出定向到标准输入的情况下使用 popen 在 C++ 中打开进程?
How to open a process in C++ using popen without directing input and output to stdin?
我正在开发一个交互式程序,它从用户那里获取输入(通过标准输入)并相应地输出数据(使用标准输出)。当程序为 运行 时,我需要打开一个后台应用程序(并在主程序为 运行 时保留它 运行)。我已经使用 popen(使用 "r" 模式)成功地做到了这一点,但有时我会遇到标准输入冲突。例如,当用户输入一个用于主程序的输入时,有时,该程序会将其视为对后台程序的输入。用户不应该直接与后台程序交互。有没有办法将后台程序的输入和输出与 stdin 和 stdout 完全解耦,同时仍然能够使用文件描述符对后台进程进行读写?
干脆不要使用popen
。相反,使用 fork
+ exec
函数族之一,它不连接 io 流。
只需编写您需要的代码即可。 popen
函数是一个方便的函数,您可以使用它恰好完成您恰好需要的操作。否则,使用 pipe
、fork
、dup2
、close
以及您想要的任何 exec
系列函数。
您可能会发现查看 popen/pclose 的一些实现以了解它们的工作原理很有帮助。根据需要进行调整。
我正在开发一个交互式程序,它从用户那里获取输入(通过标准输入)并相应地输出数据(使用标准输出)。当程序为 运行 时,我需要打开一个后台应用程序(并在主程序为 运行 时保留它 运行)。我已经使用 popen(使用 "r" 模式)成功地做到了这一点,但有时我会遇到标准输入冲突。例如,当用户输入一个用于主程序的输入时,有时,该程序会将其视为对后台程序的输入。用户不应该直接与后台程序交互。有没有办法将后台程序的输入和输出与 stdin 和 stdout 完全解耦,同时仍然能够使用文件描述符对后台进程进行读写?
干脆不要使用popen
。相反,使用 fork
+ exec
函数族之一,它不连接 io 流。
只需编写您需要的代码即可。 popen
函数是一个方便的函数,您可以使用它恰好完成您恰好需要的操作。否则,使用 pipe
、fork
、dup2
、close
以及您想要的任何 exec
系列函数。
您可能会发现查看 popen/pclose 的一些实现以了解它们的工作原理很有帮助。根据需要进行调整。