獲取標准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;

}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM