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

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

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

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

 #include  FILE *stream; stream = popen("acommand", "r"); /* use fread, fgets, etc. on stream */ pclose(stream); 

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

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

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

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

根据您的编辑, popen看起来很理想,它“非常便携”,我认为没有像操作系统那样的unix,它确实是单Unix规范和POSIX的一部分 ,它可以让你做到你想要的,执行一个进程,获取其输出并进行处理。

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

 otherprocess | your_c_program 

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