This achieves basic process execution on OpenVMS. We use work-arounds for different fork()/exec() behavior and a lack of select(). VMS emulates fork/exec using setjmp/longjmp to evaluate the child and parent return cases from fork. Therefore both must be invoked from the same function. Since select() works only for sockets we use the BeOS-style polling implementation. However, non-blocking reads on empty pipes cannot be distinguished easily from the last read on a closed pipe. Therefore we identify end of data by an empty read after the child terminates.
KWSys provides a platform-independent API to many common system features that are implemented differently on every platform. This library is intended to be shared among many projects, so it has a configurable namespace. Each project should configure KWSys to use a namespace unique to itself. See comments in CMakeLists.txt for details. You are probably reading this file in the source tree of a surrounding project. In that case, see "../README.kwsys" for details of using KWSys in your project.