ad7b415150c38ec04b911c749263ec21cc7be194
[awesomized/libmemcached] / test / lib / ForkAndExec.hpp
1 #pragma once
2
3 #include "common.hpp"
4
5 class ForkAndExec {
6 public:
7 enum mode { READ, WRITE };
8
9 ForkAndExec(const char *binary, char **argv);
10 ~ForkAndExec();
11
12 ForkAndExec(const ForkAndExec &) = delete;
13 ForkAndExec &operator = (const ForkAndExec &) = delete;
14 ForkAndExec(ForkAndExec &&) = default;
15 ForkAndExec &operator = (ForkAndExec &&) = default;
16
17 [[nodiscard]]
18 int createPipe();
19 pid_t operator () ();
20
21 private:
22 int ready[2], pipes[2];
23 const char *binary;
24 char **argv;
25
26 bool prepareExecReadyPipe();
27 void prepareOutputPipe();
28 void closePipe(int &fd);
29 void pollExecReadyPipe();
30 };