在C中提取dos命令输出

use*_*976 4 c system dos exec

使用system()exec(),我可以获得任何执行命令,但是它们会将结果显示在控制台中.我想执行命令并提取输出并处理它,然后显示它.如何在Windows/DOS平台上实现此目的?

Mat*_*lia 6

在标准C中没有类似的东西,但通常,为了与POSIX兼容,编译器实现popen(_popen在VC++中),它启动一个命令(就像它一样system)并返回一个FILE *你要求的流(你可以请求stdout,如果你想要读取输出 stdin,如果你想给程序一些输入).

一旦你有了FILE *,你可以用通常的fread/ fscanf/ ... 来阅读它,就像你在普通文件上那样.

如果你想同时拥有输入和输出重定向的东西开始变得有点复杂,因为Windows编译器通常会有类似POSIX的东西pipe,但它并不完全兼容(主要是因为Windows进程创建模型不同).

在这种情况下(并且在任何情况下,您需要对启动的进程进行更多控制而不是普通的popen给出)我只需要采用"真实"的方式在Windows上执行IO重定向,即使用CreateProcess和适当的选项; 看这里.