]> git.localhorst.tv Git - blank.git/blobdiff - src/app/Process.hpp
timeouts reading from spawned processes
[blank.git] / src / app / Process.hpp
index 490cf07103a7c2338ca1e170168042bb2ad2e933..0e84ccdd1e1f1c5c4fb5ed1b81ca623e21498997 100644 (file)
@@ -16,7 +16,12 @@ public:
 
 public:
        /// launch process executing the file at given path with
-       /// given arguments and environment
+       /// given arguments and environment of parent process
+       Process(
+               const std::string &path,
+               const Arguments &args);
+       /// launch process executing the file at given path with
+       /// given arguments and given environment
        Process(
                const std::string &path,
                const Arguments &args,
@@ -28,18 +33,32 @@ public:
        /// data is taken from given buffer, at most max_len bytes
        /// @return the number of bytes written
        std::size_t WriteIn(const void *buffer, std::size_t max_len);
+       /// close program's input stream
+       void CloseIn();
+
        /// read from the process' output stream
        /// data is stored in the given buffer, at most max_len bytes
+       /// timeout is the number of milliseconds to wait for the process
+       /// to produce output, -1 for indefinite
        /// @return the number of bytes read
-       std::size_t ReadOut(void *buffer, std::size_t max_len);
+       std::size_t ReadOut(void *buffer, std::size_t max_len, int timeout);
+       /// close program's output stream
+       void CloseOut();
+
        /// read from the process' error stream
        /// data is stored in the given buffer, at most max_len bytes
+       /// timeout is the number of milliseconds to wait for the process
+       /// to produce output, -1 for indefinite
        /// @return the number of bytes read
-       std::size_t ReadErr(void *buffer, std::size_t max_len);
+       std::size_t ReadErr(void *buffer, std::size_t max_len, int timeout);
+       /// close program's output stream
+       void CloseErr();
 
        /// ask the process nicely to terminate
        /// (except on win32)
        void Terminate();
+       /// check if the process has terminated
+       bool Terminated();
        /// wait until the process exits and fetch its exit status
        int Join();
 
@@ -47,9 +66,6 @@ private:
        struct Impl;
        std::unique_ptr<Impl> impl;
 
-       bool joined;
-       int status;
-
 };
 
 }