获取标准shell 命令的输出内容

cmdline.h

#include <iostream> #include <mutex>

class Cmdline {

private:

        Cmdline() = default;

public:

        ~Cmdline() = default;

        Cmdline(const Cmdline& cmd) = delete;

        Cmdline& operator=(const Cmdline& cmd) = delete;

public:

        static Cmdline& getInstance();

        void executeCMD(const std::string& cmd, std::string& result);

private:

        static std::mutex m_mutex;

};

 

cmdline.cpp

#include "cmdline.h"

#include "stdio.h"

std::mutex Cmdline::m_mutex;

Cmdline& Cmdline::getInstance()

{

        std::lock_guard<std::mutex> lck(m_mutex);

        static Cmdline instance;

        return instance;

}

void Cmdline::executeCMD(const std::string& cmd, std::string& result)

{

        char buf_ps[1024] = {0};

        std::string temp_cmd = cmd + " 2>&1"; //标准错误重定向到标准输出

        FILE* ptr = nullptr;

        if((ptr = popen(temp_cmd.c_str(), "r")) != nullptr)

        {

                while(fgets(buf_ps, 1024, ptr) != nullptr)

                {

                        result += buf_ps;

                }

                pclose(ptr);

                ptr = nullptr;

        }

        else

        {

                std::cout << "popen %s error!!" << std::endl;

        }

}

 

test.cpp

#include "cmdline.h"

int main(int argc, char* argv[])

{

        if(argc != 2)

        {

                std::cout << "error number args" << std::endl;

                return -1;

        }

        std::string strResult = "";

        std::string cmd = argv[1];

        Cmdline::getInstance().executeCMD(cmd, strResult);

        std::cout << "result: " << strResult << std::endl;

        return 0;

}

 

转载于:https://www.cnblogs.com/henryliublog/p/9700611.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值