prev up next   top/contents search

comp.lang.c FAQ 列表· 第19.30题

如何调用另一个程序或命令并捕获其输出?


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页


prev up next   contents search
关于此 FAQ 列表   关于 Eskimo   搜索   反馈   版权

Eskimo North 托管