]> git.localhorst.tv Git - blank.git/blob - src/app/Process.hpp
allow cloned env with child processes
[blank.git] / src / app / Process.hpp
1 #ifndef BLANK_APP_PROCESS_HPP_
2 #define BLANK_APP_PROCESS_HPP_
3
4 #include <memory>
5 #include <string>
6 #include <vector>
7
8
9 namespace blank {
10
11 class Process {
12
13 public:
14         using Arguments = std::vector<std::string>;
15         using Environment = std::vector<std::string>;
16
17 public:
18         /// launch process executing the file at given path with
19         /// given arguments and environment of parent process
20         Process(
21                 const std::string &path,
22                 const Arguments &args);
23         /// launch process executing the file at given path with
24         /// given arguments and given environment
25         Process(
26                 const std::string &path,
27                 const Arguments &args,
28                 const Environment &env);
29         ~Process();
30
31 public:
32         /// write to the process' input stream
33         /// data is taken from given buffer, at most max_len bytes
34         /// @return the number of bytes written
35         std::size_t WriteIn(const void *buffer, std::size_t max_len);
36         /// close program's input stream
37         void CloseIn();
38
39         /// read from the process' output stream
40         /// data is stored in the given buffer, at most max_len bytes
41         /// @return the number of bytes read
42         std::size_t ReadOut(void *buffer, std::size_t max_len);
43         /// close program's output stream
44         void CloseOut();
45
46         /// read from the process' error stream
47         /// data is stored in the given buffer, at most max_len bytes
48         /// @return the number of bytes read
49         std::size_t ReadErr(void *buffer, std::size_t max_len);
50         /// close program's output stream
51         void CloseErr();
52
53         /// ask the process nicely to terminate
54         /// (except on win32)
55         void Terminate();
56         /// check if the process has terminated
57         bool Terminated();
58         /// wait until the process exits and fetch its exit status
59         int Join();
60
61 private:
62         struct Impl;
63         std::unique_ptr<Impl> impl;
64
65 };
66
67 }
68
69 #endif