在C/C++编程中,经常使用system函数调用shell命令,但是无法获得运行的shell命令执行的输出结果。而使用popen能够获取到输出结果。(使用popen后,必须使用pclose关闭)
函数原型:
FILE * popen ( const char * command , const char * type );
int pclose ( FILE * stream );
其中,command为要执行的shell命令, type为创建的管道的读写类型("r" 或者 "w"),当type为“r”时,管道连接到shell子进程的标准输出,type为“w”时,管道连接到shell子进程的标准输入,故使用“r”就能获取shell命令的执行输出结果了。返回值为FILE *文件指针,使用fread即可从文件流指针中读出输出结果。
使用示例:
#include <stdio.h>
int main(void)
{
FILE *fp = NULL;
char buf[1024]={0};
fp = popen("ls -l", "r");
if(fp)
{
int ret = fread(buf,1,sizeof(buf)-1,fp);
if(ret > 0)
{
printf("%s",buf); //打印命令执行输出结果
}
pclose(fp);
}
return 0;
}
执行结果: