[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并获取返回值的主要内容,如果未能解决你的问题,请参考以下文章

c++如何获取dos命令的返回值

linux c++ 怎么 调用自己函数的

从 C++ 中获取 shell 环境变量

在 C++ 中调用类似于 unix shell 脚本的函数

颤振和Linux

C++笔记--Linux编程(10)-进程控制 fork系统调用