Home | Libraries | People | FAQ | More |
Dropped the macros BOOST_PROCESS_POSIX_API
and BOOST_PROCESS_WIN32_API
as Boost.System defines the macros BOOST_POSIX_API
and BOOST_WINDOWS_API
already.
Dropped exception class boost::process::not_found_error which was only thrown by find_executable_in_path
and replaced it with filesystem_error
.
Updated and extended the documentation (e.g. added documentation to functions which were not yet documented).
Fixed various bugs including problems with code calling Unicode- or ANSI-versions of Windows API functions.
On Windows named pipes are used if the macro BOOST_PROCESS_WINDOWS_USE_NAMED_PIPE
is defined. As only named pipes support asynchronous I/O on Windows this macro must be defined if Boost.Process should be used together with Asio.
Relicensed the code under the Boost Software License 1.0 only. The first version was available under both this license and the MIT one only to comply with Summer of Code guidelines.
The POSIX-specific bits of a child's exit status were split from the status
class into a new posix_status
class.
The status
and children
constructors were made private to prevent accidental construction by the user.
Fixed duplicate symbols when linking multiple compilation units that use the library.
Fixed build with Visual C++ compilers older than 8.0 that do not provide strcpy_s
and similar safe functions.
Removed the command_line class. The user now specifies the executable path and its arguments separately, using any classes he wants (such as a standard string and a STL container). This removes some black-box magic.
Decoupled the launcher classes into context classes and free launch functions. For example, the configuration bits of the old launcher class are now part of context
while its start
method is now implemented as the launch
free function. The same goes for the POSIX and Windows launchers. This was done to cleanly separate the action of launching a process from the parameters describing its properties. As a side effect, a lot of useless getters and setters are gone.
The environment
class was refactored (much simplified) and made public because it is now exposed to the user through the new context
.
The file forward_decls.hpp
was removed. It is not clear it was any useful, and it could be flawed in concept. Will add later on again if there really is a need for it.
The stream_behavior
enumeration was converted to a class so that it can carry more information than a simple type. This is useful to be able to implement more complex stream behaviors. As a side effect, stream merging by the use of booleans or standalone data sets is now superseded by the new redirect_to_stdout
and posix_redirect
behaviors.
The basic_work_directory_context
and environment_context
base classes were added. These are mainly provided to simplify the code in the final Context implementations but may also come handy to the end user in case he is working on his own Context implementation.
The status
and posix_status
classes were greatly simplified. Instead of providing lots of accessor functions they now just expose some constant members. This avoids the need for several preconditions and consistency checks because the interface makes incoherent situations impossible.
The pipeline
and children
classes were removed. The former was replaced by the launch_pipeline
convenience function and the pipeline_entry
class. The latter was superseded by a simple typedef and a generic wait_children
function that can be applied to any kind of collection of Child objects.
Made the processes be identified by a system-wide integer instead of a process-specific handle under Windows.
Added the process
class, an abstraction on top of child
that is able to represent any running process within the system. This was a requisite to introduce the self
class.
Added the self
class, whose instances allow access to the current process.
Added a way to force the termination of processes.
Initial public release. This is what was presented at the end of the program under which Boost.Process was developed: Google Summer of Code 2006.
This section contains a list of pending items in the library that should be addressed before it can be sent for a serious/formal review. Some of these are a simple matter of programming but others will require more consideration to decide the best way to solve them.
Improve integration with Asio for example to permit asynchronous notification of child process termination.
Make it possible to specify a timeout when waiting for child processes to terminate.
Make status
' constructor private.
Add an interface to self
to modify the current environment.
Abstract child
's streams so that self
can also provide a way to access the current process' standard streams.
Add a way (a win32_self class?) that allows the retrieval of a Windows HANDLE for the current process.
The process
class might conflict with the process
namespace. I like the names as they are, but maybe one of the two should be renamed or simply put a warning in the documentation explaining where the conflicts may arise. These happen in some compilers when giving both using namespace boost::process
and using namespace boost
.