【问题标题】:Capturing program output捕获程序输出
【发布时间】:2009-12-29 23:14:58
【问题描述】:
我正在制作一个小型库,它将基本上将程序的标准输出(例如 printf())捕获到一个单独的进程/线程中......然后这个进程应该执行某些任务(假设将这些捕获的输出写入一个文件)...我才刚刚开始做严肃的 C 编程,所以我还在学习。
我想知道最好的方法是什么,我的意思是使用进程或线程...我如何捕获这些 printf() 语句...如果由程序...一般假设是使用它的程序是线程的,所以我应该采取什么样的方法。
【问题讨论】:
标签:
c
multithreading
process
pipe
fifo
【解决方案1】:
如果您希望您的程序或库启动程序并捕获其输出,请查看 popen(3)。它会给你一个 FILE 指针,你可以在其中读取程序的输出。
【解决方案2】:
从另一个程序捕获 STDOUT 的最简单方法是将其通过管道传输到程序的 STDIN(通过命令行“>”或“|”运算符)。所以基本上,在您的 C 库中,您应该只使用 scanf、gets 或您正在使用的任何 STDIN 函数从 STDIN 读取。
这是 Unix/Linux 世界中的一个非常标准的约定 - 程序从 STDIN 读取并以某种格式正确的方式写入 STDOUT,因此您可以通过简单地将管道添加到命令行来将不同的程序连接在一起,例如:
grep "somestring" file1 file2 file3 | cut -d, -f1 | sort | uniq