捕获程序输出

时间:2009-12-29 23:14:59

标签: c multithreading process pipe fifo

我正在制作一个小型库,它基本上将程序的标准输出(例如printf())捕获到一个单独的进程/线程中......然后,这个进程应该执行某些任务(让我们把这些捕获的输出写入一个文件)...我刚开始做严肃的C编程,所以我还在学习。

我想知道最好的方法是什么,我的意思是使用进程或线程...我如何捕获这些printf()语句...此库也必须处理任何子进程,如果由程序...一般的假设是使用它的程序是一个有线程的程序,所以我应采取什么样的方法。

2 个答案:

答案 0 :(得分:4)

如果您希望程序或库启动程序并捕获其输出,请查看popen(3)。它将为您提供一个FILE指针,您可以在其中读取程序的输出。

答案 1 :(得分:0)

从另一个程序捕获STDOUT的最简单方法是将其简单地传输到程序的STDIN中(通过命令行“>”或“|”运算符)。所以基本上,在你的C库中,你应该只使用scanf,get或者你正在使用的STDIN函数来读取STDIN。

这是Unix / Linux世界中非常标准的惯例 - 程序从STDIN读取并以一种格式良好的方式写入STDOUT,因此您可以通过简单地在命令行中添加管道来将不同的程序组合在一起,例如:

grep "somestring" file1 file2 file3 | cut -d, -f1 | sort | uniq