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

Logo

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。

更多推荐