]> git.localhorst.tv Git - blank.git/blobdiff - src/app/Process.hpp
timeouts reading from spawned processes
[blank.git] / src / app / Process.hpp
index 985b661aac967819adf89a9ebcb42fb4fc3fc0f7..0e84ccdd1e1f1c5c4fb5ed1b81ca623e21498997 100644 (file)
@@ -11,12 +11,21 @@ namespace blank {
 class Process {
 
 public:
+       using Arguments = std::vector<std::string>;
+       using Environment = std::vector<std::string>;
+
+public:
+       /// launch process executing the file at given path with
+       /// 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 environment
+       /// given arguments and given environment
        Process(
                const std::string &path,
-               const std::vector<std::string> &args,
-               const std::vector<std::string> &env);
+               const Arguments &args,
+               const Environment &env);
        ~Process();
 
 public:
@@ -24,15 +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();
 
@@ -40,9 +66,6 @@ private:
        struct Impl;
        std::unique_ptr<Impl> impl;
 
-       bool joined;
-       int status;
-
 };
 
 }