class ForkAndExec {
public:
+ enum mode { READ, WRITE };
+
ForkAndExec(const char *binary, char **argv);
~ForkAndExec();
ForkAndExec(ForkAndExec &&) = default;
ForkAndExec &operator = (ForkAndExec &&) = default;
- optional<pid_t> operator () ();
+ [[nodiscard]]
+ int createPipe();
+ pid_t operator () ();
private:
- int pipes[2];
+ int ready[2], pipes[2];
const char *binary;
char **argv;
+
+ bool prepareExecReadyPipe();
+ void prepareOutputPipe();
+ void closePipe(int &fd);
+ void pollExecReadyPipe();
};