我正在编写一个 c++ 应用程序(在 Linux 中),我想在其中启动另一个应用程序,但只启动一次。 (如果它已经打开,则使用那个的 handle
)。
我也时不时想为相同的应用程序提供输入。例如:
class myapp():
start second application here.
work()
myapp::work(){
create input
provide input to the started/already open second application
}
因此,每次为 myapp 创建一个对象时,都会启动第二个应用程序(仅当它尚未打开时)。然后每次都将输入传递给应用程序?那可能吗?我也不希望第二个应用程序关闭,除非用户结束它。 我已经在使用 pid 和 fork 来做到这一点。但不知何故,它多次启动应用程序,我都无法向该应用程序提供输入。
希望这已经足够清楚了。我知道已经有很多关于此的问答,但我无法清楚地理解,因此如果我再次问同样的问题,我深表歉意?
感谢帮助
最佳答案
popen是这项工作的正确工具。您向它传递一个要执行的命令,它会返回一个 C 文件句柄 (FILE *
),它表示从您的程序到第二个程序的管道。您使用此句柄写入的所有数据都定向到第二个程序的标准输入。
请注意,这是一个 C 文件句柄,因此您需要使用 C I/O 函数,例如 fprintf写信给它。遗憾的是,没有将 C 文件句柄转换为 C++ 输出流的标准方法。
这里是一个如何使用 popen
的例子,改编自 example in the GNU libc manual :
FILE *pipe = popen("wireshark -i -k", "w"); // "w" means "write mode"
if (!pipe) {
// execution failed
return;
}
fprintf(pipe, "Some data");
…
// When you're done with the pipe:
pclose(pipe);
您可以通过将管道 FILE *
存储在用 NULL
初始化的永久变量(例如对象成员变量)中来确保程序只启动一次.然后,您可以轻松检查是否已经使用 pipe != NULL
启动了第二个应用程序。
关于c++ - 在 C++ 应用程序中启动进程并处理它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17910427/