如何捕获另一个流程';使用C语言输出?

如何捕获另一个流程';使用C语言输出?,c,capture,C,Capture,如何使用纯C捕获另一个进程的输出?你能提供示例代码吗 编辑:让我们假设Linux。我会对“可移植的”代码感兴趣。我所要做的就是执行一个命令,捕获它的输出并以某种方式处理它。如果可以使用系统管道,只需将另一个进程的输出通过管道传输到C程序,然后在C程序中读取标准输入即可 otherprocess | your_c_program 你正在使用哪个操作系统?在*nix类型的操作系统上,如果进程正在输出到STDOUT或STDERR,显然可以使用管道有几个选项,但这在某种程度上取决于您的平台。也就是说,

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


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

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

otherprocess | your_c_program

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

有几个选项,但这在某种程度上取决于您的平台。也就是说,
popen
应该适用于大多数地方,例如

#include <stdio.h>

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

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

pclose(stream);
#包括
文件*流;
stream=popen(“acommand”、“r”);
/*在流中使用fread、FGET等*/
pclose(流);
请注意,这有一个非常特殊的用途,它通过运行命令
acommand
来创建进程,并以某种方式附加其标准,以便通过流
文件*
从程序访问它

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

在windows下,您可以使用
CreateProcess
API创建一个新进程,并将其标准输出句柄连接到所需的内容。Windows还支持
popen

但据我所知,没有简单的C方式来实现这一点,因此它总是或多或少地依赖于特定于平台的API


根据您的编辑
popen
似乎很理想,它是“非常可移植的”,我认为没有类似unix的操作系统没有它,事实上它是单一unix规范的一部分,而且它让您完全可以做您想要做的事情,执行一个进程,获取其输出并处理它。

什么平台上(linux、unix、windows等)这将真正改变答案如果你想分别处理STDERR和STDOUT,这当然是无用的:)不是真的,你可以使用2>和1>将STDERR和STDOUT重定向到单独的文件,然后在每个文件上使用tail-f file | proc独立处理每个文件