How do I execute a command and get the output of the command within C++ using POSIX?

前端 未结 11 1379
我在风中等你
我在风中等你 2020-11-21 05:39

I am looking for a way to get the output of a command when it is run from within a C++ program. I have looked at using the system() function, but that will jus

11条回答
  •  生来不讨喜
    2020-11-21 06:22

    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    
    std::string exec(const char* cmd) {
        std::array buffer;
        std::string result;
        std::unique_ptr pipe(popen(cmd, "r"), pclose);
        if (!pipe) {
            throw std::runtime_error("popen() failed!");
        }
        while (fgets(buffer.data(), buffer.size(), pipe.get()) != nullptr) {
            result += buffer.data();
        }
        return result;
    }
    

    Pre-C++11 version:

    #include 
    #include 
    #include 
    #include 
    
    std::string exec(const char* cmd) {
        char buffer[128];
        std::string result = "";
        FILE* pipe = popen(cmd, "r");
        if (!pipe) throw std::runtime_error("popen() failed!");
        try {
            while (fgets(buffer, sizeof buffer, pipe) != NULL) {
                result += buffer;
            }
        } catch (...) {
            pclose(pipe);
            throw;
        }
        pclose(pipe);
        return result;
    }
    

    Replace popen and pclose with _popen and _pclose for Windows.

提交回复
热议问题