X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=testing%2Flib%2FForkAndExec.hpp;h=ad7b415150c38ec04b911c749263ec21cc7be194;hb=c0b779f4045f4858701b3741af805414bc066717;hp=b88c56a727a1a0ba575765926a8a17b4afca675f;hpb=f33fd6e7d1df8e5878ce5c5605f64bab7b02ceb6;p=awesomized%2Flibmemcached diff --git a/testing/lib/ForkAndExec.hpp b/testing/lib/ForkAndExec.hpp index b88c56a7..ad7b4151 100644 --- a/testing/lib/ForkAndExec.hpp +++ b/testing/lib/ForkAndExec.hpp @@ -4,6 +4,8 @@ class ForkAndExec { public: + enum mode { READ, WRITE }; + ForkAndExec(const char *binary, char **argv); ~ForkAndExec(); @@ -12,10 +14,17 @@ public: ForkAndExec(ForkAndExec &&) = default; ForkAndExec &operator = (ForkAndExec &&) = default; - optional 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(); };