2009-12-29 108 views
2

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

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

回答

0

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

这是Unix/Linux世界中的一个非常标准的约定 - 从STDIN读取程序并以某种格式良好的方式写入STDOUT,以便通过简单地将命令行添加到管道来将不同的程序集中在一起:

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

not'gets()';切勿使用'gets()',而应使用'fgets()'。 – pmg 2009-12-30 09:05:53

4

如果您希望程序或库启动程序并捕获其输出,请参阅popen(3)。它会给你一个FILE指针,你可以在这里读取程序的输出。