将程序输出重定向到我的程序

Redirect program output to my program

我的程序使用 fork() / execvp() 启动了一个帮助程序,我想在我的程序的 GUI 中显示帮助程序的输出。助手的输出应该在我程序的 GUI 中嵌入的列表视图小部件中逐行显示。当然,我可以将输出重定向到一个文件,等待助手完成,然后读取整个文件并显示它。但这不是最佳解决方案。理想情况下,我想显示助手的输出,因为它被发送到标准输出,即一行一行,而助手仍在工作。

执行此操作的建议方法是什么?

从我的脑海中浮现出以下解决方案,但我不确定它是否会起作用,因为一个进程将写入文件,而另一个进程则试图从文件中读取:

1) 在 fork() 之后使用 execvp() 像这样启动助手:

./helper > tmpfile

2) 之后,我的程序尝试使用 open() 打开 "tmpfile",然后使用 select() 等待,直到从该文件中读取内容。一旦我的程序获得一行输出,它就会将它发送到我的 GUI 的列表视图小部件。

这是应该的做法还是我完全走错了路?

谢谢!

您应该打开一个 pipe 并使用 select 监视子进程的进度。如果您只需要单向通信,您也可以使用 popen,在这种情况下,您将通过在返回的 FILE*.

上调用 fileno 来获取文件描述符

参见: