‘壹’ 请教C++程序如何捕获linux shell的输出
调用系统函数popen,利用管道实现输出的传送即可。
popen()
函数通过创建一个管道,调用
fork
产生一个子进程,执行一个
shell
以运行命令来开启一个进程。这个进程必须由
pclose()
函数关闭,而不是
fclose()
函数。pclose()
函数关闭标准
I/O
流,等待命令执行结束,然后返回
shell
的终止状态。如果
shell
不能被执行,则
pclose()
返回的终止状态与
shell
已执行
exit
一样。
type参数只能是读或者写中的一种,得到的返回值(标准
I/O
流)也具有和
type
相应的只读或只写类型。如果
type
是
"r"
则文件指针连接到
command
的标准输出;如果
type
是
"w"
则文件指针连接到
command
的标准输入。
command参数是一个指向以
NULL
结束的
shell
命令字符串的指针。这行命令将被传到
bin/sh
并使用-c
标志,shell
将执行这个命令。
popen的返回值是个标准
I/O
流,必须由pclose来终止。前面提到这个流是单向的。所以向这个流写内容相当于写入该命令的标准输入;命令的标准输出和调用popen的进程相同。与之相反的,从流中读数据相当于读取命令的标准输出;命令的标准输入和调用popen的进程相同。
例程如下:
#include<cstdio>
#include<unistd.h>
#include<cstring>
#include<cstdlib>
intmain()
{
FILE*read_fp;
charbuffer[BUFSIZ+1];
intchars_read;
memset(buffer,'