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