Riyyi
3 years ago
3 changed files with 87 additions and 4 deletions
@ -0,0 +1,53 @@
|
||||
#include <cstdio> // pclose, perror, popen |
||||
#include <string> |
||||
#include <string_view> |
||||
|
||||
#include "util/shell.h" |
||||
|
||||
namespace Util { |
||||
|
||||
Shell::Shell() |
||||
{ |
||||
} |
||||
|
||||
Shell::Shell(std::string output, int status) |
||||
: m_output(output) |
||||
, m_status(status) |
||||
{ |
||||
} |
||||
|
||||
Shell Shell::operator()(const char* command) |
||||
{ |
||||
FILE* shell = popen(command, "r"); |
||||
if (!shell) { |
||||
perror("\033[31;1mError:\033[0m popen"); |
||||
return { "", -1 }; |
||||
} |
||||
|
||||
std::string output; |
||||
|
||||
constexpr int bufferSize = 4096; |
||||
char buffer[bufferSize]; |
||||
while (fgets(buffer, sizeof(buffer), shell)) { |
||||
output.append(buffer); |
||||
} |
||||
|
||||
int status = pclose(shell); |
||||
if (status < 0) { |
||||
perror("\033[31;1mError:\033[0m pclose"); |
||||
} |
||||
|
||||
return { output, status }; |
||||
} |
||||
|
||||
Shell Shell::operator()(std::string command) |
||||
{ |
||||
return operator()(command.c_str()); |
||||
} |
||||
|
||||
Shell Shell::operator()(std::string_view command) |
||||
{ |
||||
return operator()(command.data()); |
||||
} |
||||
|
||||
} // namespace Util
|
@ -0,0 +1,30 @@
|
||||
#ifndef SHELL_H |
||||
#define SHELL_H |
||||
|
||||
#include <string> |
||||
#include <string_view> |
||||
|
||||
namespace Util { |
||||
|
||||
class Shell { |
||||
public: |
||||
Shell(); |
||||
virtual ~Shell() {} |
||||
|
||||
Shell operator()(const char* command); |
||||
Shell operator()(std::string command); |
||||
Shell operator()(std::string_view command); |
||||
|
||||
std::string output() const { return m_output; } |
||||
int status() const { return m_status; } |
||||
|
||||
private: |
||||
Shell(std::string output, int status); |
||||
|
||||
std::string m_output; |
||||
int m_status { 0 }; |
||||
}; |
||||
|
||||
} // namespace Util
|
||||
|
||||
#endif // SHELL_H
|
Loading…
Reference in new issue