zoukankan      html  css  js  c++  java
  • 获取标准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;

    }

  • 相关阅读:
    天气预报 Web 服务
    安装IE8在控制面板里面删除之后进不去桌面,提示找不到IESetting.dll 解决办法(解决IE8卸载不了的问题,返回IE7 ,返回IE6),从IE8回到IE7的方法.
    提供股票的Web Sservices 接口
    vc中操作Xml使用CMarkup类
    不要埋怨空降兵了
    图像分割与描述
    [非常感人] 我还能再救一个!
    向汶川地震中死难者致哀
    关于dotNet加密工具
    不注册使用 .NET Reactor
  • 原文地址:https://www.cnblogs.com/henryliublog/p/9700611.html
Copyright © 2011-2022 走看看