如何使用C捕获另一个进程的输出?

时间:2009-03-14 22:35:09

标签: c capture

如何使用纯C捕获另一个进程的输出?你能提供示例代码吗?

编辑:让我们假设Linux。我会对“非常便携”的代码感兴趣。我想做的就是执行命令,捕获它的输出并以某种方式处理它。

3 个答案:

答案 0 :(得分:5)

有几种选择,但它在某种程度上取决于您的平台。那说popen应该在大多数地方都有效,例如

#include <stdio.h>

FILE *stream;
stream = popen("acommand", "r");

/* use fread, fgets, etc. on stream */

pclose(stream);

请注意,这有一个非常具体的用途,它通过运行命令acommand来创建进程,并以一种方式附加其标准,以便通过流{{1}从程序中访问它}。

如果您需要连接到现有流程,或需要执行更丰富的操作,您可能需要查看其他工具。 Unix有各种机制来连接进程stdout等。

在Windows下,您可以使用FILE* API创建新进程,并将其标准输出句柄连接到您想要的内容。 Windows还支持CreateProcess

虽然我知道没有简单的C方法可以做到这一点,所以它总是在某种程度上取决于特定于平台的AP。

基于您的编辑popen似乎是理想的,它“非常便携”,我认为没有像操作系统这样的unix,它确实是单Unix规范的一部分,{{3}它可以让你完全按照自己的意愿行事,执行流程,获取输出并处理它。

答案 1 :(得分:3)

如果你可以使用系统管道,只需将其他进程的输出传递给你的C程序,在你的C程序中,只需读取标准输入。

otherprocess | your_c_program

答案 2 :(得分:0)

您使用的是哪种操作系统?在* nix类型操作系统上,如果您正在输出到STDOUT或STDERR,您显然可以使用管道