在标准C中没有类似的东西,但通常,为了与POSIX兼容,编译器实现popen
(_popen
在VC++中),它启动一个命令(就像它一样system
)并返回一个FILE *
你要求的流(你可以请求stdout,如果你想要读取输出或 stdin,如果你想给程序一些输入).
一旦你有了FILE *
,你可以用通常的fread
/ fscanf
/ ... 来阅读它,就像你在普通文件上那样.
如果你想同时拥有输入和输出重定向的东西开始变得有点复杂,因为Windows编译器通常会有类似POSIX的东西pipe
,但它并不完全兼容(主要是因为Windows进程创建模型不同).
在这种情况下(并且在任何情况下,您需要对启动的进程进行更多控制而不是普通的popen
给出)我只需要采用"真实"的方式在Windows上执行IO重定向,即使用CreateProcess
和适当的选项; 看这里.