[C++][linux]C++调用shell并获取返回值
Posted FL1623863129
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[C++][linux]C++调用shell并获取返回值相关的知识,希望对你有一定的参考价值。
实例:
#include <stdio.h>
#include <string.h>
#include <iostream>
int main()
char outBuffer[1024]; // 保存运行后输出的结果
char *cmdStr = "ls ."; // 准备运行的命令
FILE * pipeLine = popen(cmdStr,"r"); // 建立流管道
if(!pipeLine) // 检测流管道
perror("Fail to popen\\n");
return 1;
while(fgets(outBuffer, 1024, pipeLine) != NULL) // 获取输出
printf("输出: %s",outBuffer); // 打印输出
pclose(pipeLine);
return 0;
但是有时候我们利用上面命令却获取不到输出,这是因为有的程序是在stderr上进行输出的,比如ffmpeg,因此可以改成类似下面的代码:
popen创建的管道,默认读取的是标准输出stdout,但很多程序(如ffmpeg相关的)输出到stderr上,为了能方便地读取这些输出,需要在执行命令时,对输出做重定向( 2>&1)。
int RunCmd(std::string strCmd, PFunCommandOutput funOut)
FILE *fp = NULL;
char data[1024] = 0;
LOG(INFO) << "To popen: " << strCmd;
strCmd += " 2>&1";
fp = popen(strCmd.c_str(), "r");
if (NULL == fp)
LOG(ERROR) << "popen " << strCmd << " fail: " << errno;
return -1;
while (fgets(data, sizeof(data), fp) != NULL)
if (NULL != funOut)
funOut(data);
return pclose(fp)
执行命令的输出信息,通过回调函数返回给调用者;当命令执行完成后,函数会返回命令的执行结果。
以上是关于[C++][linux]C++调用shell并获取返回值的主要内容,如果未能解决你的问题,请参考以下文章