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;
}