4

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

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

4

3 回答 3

5

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

#include <stdio.h>

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

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

pclose(stream);

请注意,这有一个非常具体的用途,它通过运行命令来创建进程,acommand并以某种方式附加其标准,以便您的程序可以通过 stream 访问它FILE*

如果您需要连接到现有流程,或者需要进行更丰富的操作,您可能需要研究其他设施。Unix 有各种机制来连接进程标准输出等。

在 Windows 下,您可以使用CreateProcessAPI 创建一个新进程并将其标准输出句柄连接到您想要的。Windows 还支持popen.

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

根据您的编辑popen似乎很理想,它“非常便携”,我认为没有它就没有像操作系统这样的 unix,确实它是 Single Unix Specification 和POSIX的一部分,它可以让你做你想做的事,执行一个进程,获取它的输出并处理它。

于 2009-03-14T22:49:44.463 回答
3

如果您可以使用系统管道,只需将其他进程的输出通过管道传输到您的 C 程序,然后在您的 C 程序中,只需读取标准输入即可。

otherprocess | your_c_program
于 2009-03-14T22:38:18.513 回答
0

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

于 2009-03-14T22:38:32.337 回答