如何使用纯 C 捕获另一个进程的输出?你能提供示例代码吗?
编辑:让我们假设 Linux。我会对“非常便携”的代码感兴趣。我想做的就是执行一个命令,捕获它的输出并以某种方式处理它。
有几种选择,但它在某种程度上取决于您的平台。那说popen
应该在大多数地方都有效,例如
#include <stdio.h>
FILE *stream;
stream = popen("acommand", "r");
/* use fread, fgets, etc. on stream */
pclose(stream);
请注意,这有一个非常具体的用途,它通过运行命令来创建进程,acommand
并以某种方式附加其标准,以便您的程序可以通过 stream 访问它FILE*
。
如果您需要连接到现有流程,或者需要进行更丰富的操作,您可能需要研究其他设施。Unix 有各种机制来连接进程标准输出等。
在 Windows 下,您可以使用CreateProcess
API 创建一个新进程并将其标准输出句柄连接到您想要的。Windows 还支持popen
.
我知道没有简单的 C 方法可以做到这一点,所以它总是在某种程度上依赖于特定于平台的 API。
根据您的编辑popen
似乎很理想,它“非常便携”,我认为没有它就没有像操作系统这样的 unix,确实它是 Single Unix Specification 和POSIX的一部分,它可以让你做你想做的事,执行一个进程,获取它的输出并处理它。
如果您可以使用系统管道,只需将其他进程的输出通过管道传输到您的 C 程序,然后在您的 C 程序中,只需读取标准输入即可。
otherprocess | your_c_program
您使用的是哪个操作系统?在 *nix 类型的操作系统上,如果您的进程正在输出到 STDOUT 或 STDERR,您显然可以使用管道