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

时间:2015-03-31 15:48:37

标签: c linux posix stdio

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

建议的方法是什么?

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

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

./helper > tmpfile

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

这是应该怎么做的,还是我完全走错了路?

谢谢!

1 个答案:

答案 0 :(得分:1)

您应该打开pipe并使用select监控子进程的进度。如果您只需要单向通信,也可以使用popen,在这种情况下,您将通过调用返回的fileno上的FILE*来获取文件描述符。

请参阅: