diff options
author | Jeff Hatch <jhatch@multitech.com> | 2022-09-30 08:33:41 -0500 |
---|---|---|
committer | Jeff Hatch <jhatch@multitech.com> | 2022-09-30 08:33:41 -0500 |
commit | 6ea0b34c62361ad76ca7409a766c746997b8cfce (patch) | |
tree | 947aa9d76782492023219240b51b5086e22be605 /include/mts | |
parent | 790f535aa15e9d149d742bada1e25358d381b5f6 (diff) | |
parent | 64e315d136d63873600895c7385dd40c4cb254ba (diff) | |
download | libmts-6ea0b34c62361ad76ca7409a766c746997b8cfce.tar.gz libmts-6ea0b34c62361ad76ca7409a766c746997b8cfce.tar.bz2 libmts-6ea0b34c62361ad76ca7409a766c746997b8cfce.zip |
Introduce System::executeEnv and System::executeBackgroundEnv
See merge request !4
Diffstat (limited to 'include/mts')
-rw-r--r-- | include/mts/MTS_System.h | 28 |
1 files changed, 27 insertions, 1 deletions
diff --git a/include/mts/MTS_System.h b/include/mts/MTS_System.h index d51a5ea..24dc616 100644 --- a/include/mts/MTS_System.h +++ b/include/mts/MTS_System.h @@ -78,6 +78,18 @@ namespace MTS { */ static int32_t execute(const std::string& cmd, const std::vector<std::string>& argv, std::string& result); + //! Execute application with specified arguments and environment variables inheritance. + /*! + * A safer alternative to System::cmd that allows to execute applications with controlled + * list of arguments and inherited environment variables bypasing the system shell. + * + * \param cmd name of the application to be executed + * \param argv vector of arguments (excluding argument zero) + * \param result stdout output from the application is stored here + * \return result code as for std::system and UNIX pclose + */ + static int32_t executeEnv(const std::string& cmd, const std::vector<std::string>& argv, std::string& result); + //! Spawn a process and open pipe with the specified type (READ or WRITE) /*! * A safer alternative to POSIX popen that allows to execute applications with controlled @@ -92,6 +104,20 @@ namespace MTS { */ static bool executeBackground(const std::string& cmd, const std::vector<std::string>& argv, PipeType type, ChildHandle& child); + //! Spawn a process and open pipe with the specified type (READ or WRITE) + /*! + * A safer alternative to POSIX popen that allows to execute applications with controlled + * list of arguments and inherited environment variables bypasing the system shell. + * If succeded, information about the spawned process is written to the \p child structure. + * + * \param cmd name of the application to be executed + * \param argv vector of arguments (excluding argument zero) + * \param type open pipe for read from child or write to child + * \param child on success is populated with child process information, on failure is not defined + * \return true on success, false on failure + */ + static bool executeBackgroundEnv(const std::string& cmd, const std::vector<std::string>& argv, PipeType type, ChildHandle& child); + //! Close the pipe and wait for a child to finish execution /*! * \param child structure with child process information as populated by executeBackground @@ -102,7 +128,7 @@ namespace MTS { private: //! Spawn a process and open pipe with the specified type (READ or WRITE) - static bool executeBackground(const std::string& cmd, char* const argv[], PipeType type, ChildHandle& child); + static bool executeBackground(const std::string& cmd, char* const argv[], bool env, PipeType type, ChildHandle& child); //! Utility method. Cast argument to a C pointer required by some C-style functions. static inline char* castArgument(const std::string& arg); |