diff options
Diffstat (limited to 'src/cmd_out.cc')
| -rw-r--r-- | src/cmd_out.cc | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/src/cmd_out.cc b/src/cmd_out.cc new file mode 100644 index 0000000..a855add --- /dev/null +++ b/src/cmd_out.cc @@ -0,0 +1,18 @@ +#include <cstdio> +#include <memory> +#include <stdexcept> +#include <string> +#include <array> + +std::string cmd_out(const char* cmd) { + std::array<char, 128> buffer; + std::string result; + std::unique_ptr<FILE, decltype(&pclose)> pipe(popen(cmd, "r"), pclose); + if (!pipe) { + throw std::runtime_error("popen() failed!"); + } + while (fgets(buffer.data(), static_cast<int>(buffer.size()), pipe.get()) != nullptr) { + result += buffer.data(); + } + return result; +} |
