问如何调用另一个程序或命令并捕获其输出?
答Unix 和一些其他系统提供了一个popen函数,该函数在一个连接到运行命令的进程的管道上设置一个 stdio 流,以便调用程序可以读取输出(或者提供输入)。使用popen,第19.28题中的最后一个例子将如下所示:
extern FILE *popen(); sprintf(cmdbuf, "sort < %s", datafile); fp = popen(cmdbuf, "r"); /* ...now read sorted data from fp... */ pclose(fp);(请务必调用pclose,如所示;省略它起初看起来似乎可以工作,但最终可能会导致进程或文件描述符耗尽。)
如果不能使用popen,可以尝试使用system,将输出写入一个文件,然后打开并读取该文件,就像第19.28题中的代码已经做的那样。[脚注]
如果您使用的是 Unix 并且popen不足以满足需求,您可以了解pipe, dup, fork,而exec.
(顺便说一句,一个可能不起作用的方法是使用freopen.)
参考:PCS 第11章第169页