aboutsummaryrefslogtreecommitdiff
path: root/src/cmd_out.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/cmd_out.cc')
-rw-r--r--src/cmd_out.cc18
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;
+}