|
Boost-Commit : |
Subject: [Boost-commit] svn:boost r63106 - in sandbox/SOC/2010/process: boost boost/process libs/process/example
From: boris_at_[hidden]
Date: 2010-06-19 14:19:00
Author: bschaeling
Date: 2010-06-19 14:18:59 EDT (Sat, 19 Jun 2010)
New Revision: 63106
URL: http://svn.boost.org/trac/boost/changeset/63106
Log:
Added pipe type to support asynchronous read/write operations
Added:
sandbox/SOC/2010/process/boost/process/pipe.hpp (contents, props changed)
sandbox/SOC/2010/process/libs/process/example/wait_sync_child.cpp
- copied unchanged from r63094, /sandbox/SOC/2010/process/libs/process/example/wait_child.cpp
Removed:
sandbox/SOC/2010/process/libs/process/example/child_stdin.cpp
sandbox/SOC/2010/process/libs/process/example/child_stdout.cpp
sandbox/SOC/2010/process/libs/process/example/wait_child.cpp
Properties modified:
sandbox/SOC/2010/process/libs/process/example/ (props changed)
Text files modified:
sandbox/SOC/2010/process/boost/process.hpp | 34 +-----------------
sandbox/SOC/2010/process/boost/process/all.hpp | 1
sandbox/SOC/2010/process/boost/process/context.hpp | 18 +++++-----
sandbox/SOC/2010/process/boost/process/pistream.hpp | 2
sandbox/SOC/2010/process/boost/process/postream.hpp | 2
sandbox/SOC/2010/process/boost/process/stream_behavior.hpp | 70 ++++++++++++++++++++++++++++-----------
sandbox/SOC/2010/process/libs/process/example/create_process.cpp | 11 ++----
sandbox/SOC/2010/process/libs/process/example/read_async_from_child.cpp | 25 ++++----------
sandbox/SOC/2010/process/libs/process/example/read_from_child.cpp | 10 ++++-
sandbox/SOC/2010/process/libs/process/example/write_async_to_child.cpp | 13 +++----
sandbox/SOC/2010/process/libs/process/example/write_to_child.cpp | 4 +-
11 files changed, 91 insertions(+), 99 deletions(-)
Modified: sandbox/SOC/2010/process/boost/process.hpp
==============================================================================
--- sandbox/SOC/2010/process/boost/process.hpp (original)
+++ sandbox/SOC/2010/process/boost/process.hpp 2010-06-19 14:18:59 EDT (Sat, 19 Jun 2010)
@@ -14,50 +14,22 @@
* \file boost/process.hpp
*
* Convenience header that includes all other Boost.Process public header
- * files. It is important to note that those headers that are specific to
- * a given platform are only included if the library is being used in that
- * same platform.
+ * files.
*/
#ifndef BOOST_PROCESS_HPP
#define BOOST_PROCESS_HPP
#include <boost/process/config.hpp>
-
-#if defined(BOOST_POSIX_API)
-/*
-# include <boost/process/posix_child.hpp>
-# include <boost/process/posix_context.hpp>
-# include <boost/process/posix_operations.hpp>
-# include <boost/process/posix_status.hpp>
-*/
-#elif defined(BOOST_WINDOWS_API)
-/*
-# include <boost/process/win32_child.hpp>
-# include <boost/process/win32_context.hpp>
-# include <boost/process/win32_operations.hpp>
-*/
-#else
-# error "Unsupported platform."
-#endif
-/*
#include <boost/process/child.hpp>
#include <boost/process/context.hpp>
#include <boost/process/environment.hpp>
#include <boost/process/operations.hpp>
-#include <boost/process/pistream.hpp>
-#include <boost/process/postream.hpp>
-#include <boost/process/process.hpp>
-#include <boost/process/self.hpp>
-#include <boost/process/status.hpp>
-#include <boost/process/stream_behavior.hpp>
-*/
-#include <boost/process/child.hpp>
-#include <boost/process/context.hpp>
-#include <boost/process/operations.hpp>
+#include <boost/process/pipe.hpp>
#include <boost/process/pistream.hpp>
#include <boost/process/postream.hpp>
#include <boost/process/process.hpp>
#include <boost/process/status.hpp>
#include <boost/process/stream_behavior.hpp>
+
#endif
Modified: sandbox/SOC/2010/process/boost/process/all.hpp
==============================================================================
--- sandbox/SOC/2010/process/boost/process/all.hpp (original)
+++ sandbox/SOC/2010/process/boost/process/all.hpp 2010-06-19 14:18:59 EDT (Sat, 19 Jun 2010)
@@ -25,6 +25,7 @@
#include <boost/process/context.hpp>
#include <boost/process/environment.hpp>
#include <boost/process/operations.hpp>
+#include <boost/process/pipe.hpp>
#include <boost/process/pistream.hpp>
#include <boost/process/postream.hpp>
#include <boost/process/process.hpp>
Modified: sandbox/SOC/2010/process/boost/process/context.hpp
==============================================================================
--- sandbox/SOC/2010/process/boost/process/context.hpp (original)
+++ sandbox/SOC/2010/process/boost/process/context.hpp 2010-06-19 14:18:59 EDT (Sat, 19 Jun 2010)
@@ -33,9 +33,9 @@
*/
struct context
{
- boost::shared_ptr<stream_behavior> stdin_behavior;
- boost::shared_ptr<stream_behavior> stdout_behavior;
- boost::shared_ptr<stream_behavior> stderr_behavior;
+ boost::shared_ptr<behavior::stream> stdin_behavior;
+ boost::shared_ptr<behavior::stream> stdout_behavior;
+ boost::shared_ptr<behavior::stream> stderr_behavior;
std::string process_name;
std::string work_dir;
environment environment;
@@ -48,13 +48,13 @@
*/
context()
#if defined(BOOST_POSIX_API)
- : stdin_behavior(boost::make_shared<inherit>(inherit(STDIN_FILENO))),
- stdout_behavior(boost::make_shared<inherit>(inherit(STDOUT_FILENO))),
- stderr_behavior(boost::make_shared<inherit>(inherit(STDERR_FILENO))),
+ : stdin_behavior(behavior::inherit::def(behavior::inherit(STDIN_FILENO))),
+ stdout_behavior(behavior::inherit::def(behavior::inherit(STDOUT_FILENO))),
+ stderr_behavior(behavior::inherit::def(behavior::inherit(STDERR_FILENO))),
#elif defined(BOOST_WINDOWS_API)
- : stdin_behavior(boost::make_shared<inherit>(inherit(::GetStdHandle(STD_INPUT_HANDLE)))),
- stdout_behavior(boost::make_shared<inherit>(inherit(::GetStdHandle(STD_OUTPUT_HANDLE)))),
- stderr_behavior(boost::make_shared<inherit>(inherit(::GetStdHandle(STD_ERROR_HANDLE)))),
+ : stdin_behavior(behavior::inherit::def(::GetStdHandle(STD_INPUT_HANDLE))),
+ stdout_behavior(behavior::inherit::def(::GetStdHandle(STD_OUTPUT_HANDLE))),
+ stderr_behavior(behavior::inherit::def(::GetStdHandle(STD_ERROR_HANDLE))),
#endif
work_dir(self::get_work_dir()),
environment(self::get_environment())
Added: sandbox/SOC/2010/process/boost/process/pipe.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2010/process/boost/process/pipe.hpp 2010-06-19 14:18:59 EDT (Sat, 19 Jun 2010)
@@ -0,0 +1,43 @@
+//
+// Boost.Process
+// ~~~~~~~~~~~~~
+//
+// Copyright (c) 2006, 2007 Julio M. Merino Vidal
+// Copyright (c) 2008, 2009 Boris Schaeling
+// Copyright (c) 2010 Felipe Tanus, Boris Schaeling
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+/**
+ * \file boost/process/pipe.hpp
+ *
+ * Includes the declaration of the pipe class.
+ */
+
+#ifndef BOOST_PROCESS_PIPE_HPP
+#define BOOST_PROCESS_PIPE_HPP
+
+#include <boost/process/config.hpp>
+#include <boost/asio.hpp>
+
+namespace boost {
+namespace process {
+
+/**
+ * The pipe class is a type definition for stream-based classes
+ * defined by Boost.Asio.
+ */
+#if defined(BOOST_POSIX_API)
+typedef boost::asio::posix::stream_descriptor pipe;
+#elif defined(BOOST_WINDOWS_API)
+typedef boost::asio::windows::stream_handle pipe;
+#else
+# error "Unsupported platform."
+#endif
+
+}
+}
+
+#endif
Modified: sandbox/SOC/2010/process/boost/process/pistream.hpp
==============================================================================
--- sandbox/SOC/2010/process/boost/process/pistream.hpp (original)
+++ sandbox/SOC/2010/process/boost/process/pistream.hpp 2010-06-19 14:18:59 EDT (Sat, 19 Jun 2010)
@@ -82,7 +82,7 @@
* The file handle must not be copied. Copying invalidates
* the source file handle making the pistream unusable.
*/
- detail::file_handle &handle()
+ detail::file_handle &native()
{
return handle_;
}
Modified: sandbox/SOC/2010/process/boost/process/postream.hpp
==============================================================================
--- sandbox/SOC/2010/process/boost/process/postream.hpp (original)
+++ sandbox/SOC/2010/process/boost/process/postream.hpp 2010-06-19 14:18:59 EDT (Sat, 19 Jun 2010)
@@ -82,7 +82,7 @@
* The file handle must not be copied. Copying invalidates
* the source file handle making the postream unusable.
*/
- detail::file_handle &handle()
+ detail::file_handle &native()
{
return handle_;
}
Modified: sandbox/SOC/2010/process/boost/process/stream_behavior.hpp
==============================================================================
--- sandbox/SOC/2010/process/boost/process/stream_behavior.hpp (original)
+++ sandbox/SOC/2010/process/boost/process/stream_behavior.hpp 2010-06-19 14:18:59 EDT (Sat, 19 Jun 2010)
@@ -13,7 +13,7 @@
/**
* \file boost/process/stream_behavior.hpp
*
- * Includes the declaration of the stream_behavior classes.
+ * Includes the declaration of stream behavior classes.
*
*/
@@ -32,8 +32,12 @@
# include <windows.h>
#endif
+#include <boost/shared_ptr.hpp>
+#include <boost/make_shared.hpp>
+
namespace boost {
namespace process {
+namespace behavior {
/*
* BEHAVIOR | BEFORE fork/CreateProcess | AFTER fork/CreateProcess
@@ -52,10 +56,10 @@
/**
* Stream behaviors are used to configure streams of a child process.
*
- * The class stream_behavior is the base class all other stream behavior
- * classes must be derived from.
+ * The class stream is the base class all other stream behavior classes
+ * must be derived from.
*/
-class stream_behavior
+class stream
{
public:
#if defined(BOOST_POSIX_API)
@@ -64,7 +68,12 @@
typedef HANDLE native_type;
#endif
- virtual native_type get_child_end() const
+ static boost::shared_ptr<stream> def()
+ {
+ return boost::make_shared<stream>(stream());
+ }
+
+ virtual native_type get_child_end()
{
#if defined(BOOST_POSIX_API)
return -1;
@@ -73,7 +82,7 @@
#endif
}
- virtual native_type get_parent_end() const
+ virtual native_type get_parent_end()
{
#if defined(BOOST_POSIX_API)
return -1;
@@ -88,7 +97,7 @@
*
* A child process will not be able to use its streams.
*/
-typedef stream_behavior close;
+typedef stream close;
/**
* Stream behavior to make a child process inherit streams.
@@ -96,7 +105,7 @@
* A child process will use the very same streams the current
* process uses.
*/
-class inherit : public stream_behavior
+class inherit : public stream
{
public:
inherit(native_type child_end)
@@ -108,7 +117,12 @@
#endif
}
- native_type get_child_end() const
+ static boost::shared_ptr<inherit> def(native_type child_end)
+ {
+ return boost::make_shared<inherit>(inherit(child_end));
+ }
+
+ native_type get_child_end()
{
return child_end_;
}
@@ -123,12 +137,12 @@
* A child process will be able to communicate with the current
* process.
*/
-class capture : public stream_behavior
+class pipe : public stream
{
public:
enum stream_type { input_stream, output_stream };
- capture(stream_type stream)
+ pipe(stream_type stream)
{
native_type natives[2];
#if defined(BOOST_POSIX_API)
@@ -151,12 +165,17 @@
#endif
}
- native_type get_child_end() const
+ static boost::shared_ptr<pipe> def(stream_type stream)
+ {
+ return boost::make_shared<pipe>(pipe(stream));
+ }
+
+ native_type get_child_end()
{
return child_end_;
}
- native_type get_parent_end() const
+ native_type get_parent_end()
{
return parent_end_;
}
@@ -174,12 +193,12 @@
* asynchronous I/O (as only named pipes support asynchronous I/O
* on Windows).
*/
-class capture_with_named_pipe : public stream_behavior
+class named_pipe : public stream
{
public:
enum stream_type { input_stream, output_stream };
- capture_with_named_pipe(stream_type stream, std::string name = "")
+ named_pipe(stream_type stream, std::string name = "")
{
native_type natives[2];
#if defined(BOOST_POSIX_API)
@@ -261,12 +280,17 @@
#endif
}
- native_type get_child_end() const
+ static boost::shared_ptr<named_pipe> def(stream_type stream)
+ {
+ return boost::make_shared<named_pipe>(named_pipe(stream));
+ }
+
+ native_type get_child_end()
{
return child_end_;
}
- native_type get_parent_end() const
+ native_type get_parent_end()
{
return parent_end_;
}
@@ -282,12 +306,12 @@
* A child process will be able to use streams. But data written to an
* output stream is discarded and data read from an input stream is 0.
*/
-class mute : public stream_behavior
+class dummy : public stream
{
public:
enum stream_type { input_stream, output_stream };
- mute(stream_type stream)
+ dummy(stream_type stream)
{
#if defined(BOOST_POSIX_API)
std::string filename = (stream == input_stream) ? "/dev/zero" : "/dev/null";
@@ -301,7 +325,12 @@
#endif
}
- native_type get_child_end() const
+ static boost::shared_ptr<dummy> def(stream_type stream)
+ {
+ return boost::make_shared<dummy>(dummy(stream));
+ }
+
+ native_type get_child_end()
{
return child_end_;
}
@@ -312,5 +341,6 @@
}
}
+}
#endif
Deleted: sandbox/SOC/2010/process/libs/process/example/child_stdin.cpp
==============================================================================
--- sandbox/SOC/2010/process/libs/process/example/child_stdin.cpp 2010-06-19 14:18:59 EDT (Sat, 19 Jun 2010)
+++ (empty file)
@@ -1,27 +0,0 @@
-//
-// Boost.Process
-// ~~~~~~~~~~~~~
-//
-// Copyright (c) 2006, 2007 Julio M. Merino Vidal
-// Copyright (c) 2008, 2009 Boris Schaeling
-// Copyright (c) 2010 Felipe Tanus, Boris Schaeling
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#include <boost/process/all.hpp>
-#include <string>
-#include <iostream>
-
-using namespace boost::process;
-
-int main()
-{
- std::string exe = find_executable_in_path("ftp");
- context ctx;
- ctx.stdin_behavior = boost::make_shared<capture>(capture(capture::input_stream));
- child c = create_child(exe, ctx);
- postream &os = c.get_stdin();
- os << "quit" << std::endl;
-}
Deleted: sandbox/SOC/2010/process/libs/process/example/child_stdout.cpp
==============================================================================
--- sandbox/SOC/2010/process/libs/process/example/child_stdout.cpp 2010-06-19 14:18:59 EDT (Sat, 19 Jun 2010)
+++ (empty file)
@@ -1,30 +0,0 @@
-//
-// Boost.Process
-// ~~~~~~~~~~~~~
-//
-// Copyright (c) 2006, 2007 Julio M. Merino Vidal
-// Copyright (c) 2008, 2009 Boris Schaeling
-// Copyright (c) 2010 Felipe Tanus, Boris Schaeling
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#include <boost/process/all.hpp>
-#include <boost/make_shared.hpp>
-#include <string>
-#include <iostream>
-
-using namespace boost::process;
-
-int main()
-{
- std::string exe = find_executable_in_path("hostname");
- context ctx;
- ctx.stdout_behavior = boost::make_shared<capture>(capture(capture::output_stream));
- child c = create_child(exe, ctx);
- pistream &is = c.get_stdout();
- std::string hostname;
- is >> hostname;
- std::cout << hostname << std::endl;
-}
Modified: sandbox/SOC/2010/process/libs/process/example/create_process.cpp
==============================================================================
--- sandbox/SOC/2010/process/libs/process/example/create_process.cpp (original)
+++ sandbox/SOC/2010/process/libs/process/example/create_process.cpp 2010-06-19 14:18:59 EDT (Sat, 19 Jun 2010)
@@ -1,4 +1,4 @@
-/
+//
// Boost.Process
// ~~~~~~~~~~~~~
//
@@ -11,6 +11,7 @@
//
#include <boost/process/all.hpp>
+#include <boost/make_shared.hpp>
#include <boost/assign/list_of.hpp>
#include <vector>
#include <string>
@@ -27,11 +28,7 @@
context ctx;
ctx.environment.insert(std::make_pair("NEW_ENV_VARIABLE", "VALUE"));
-
- ctx.stdin_behavior = boost::make_shared<close>(close());
- ctx.stdout_behavior = boost::make_shared<close>(close());
+ ctx.stdin_behavior = behavior::close::def();
+ ctx.stdout_behavior = behavior::close::def();
child c3 = create_child(find_executable_in_path("hostname"), args, ctx);
-
- int x;
- std::cin >> x;
}
Modified: sandbox/SOC/2010/process/libs/process/example/read_async_from_child.cpp
==============================================================================
--- sandbox/SOC/2010/process/libs/process/example/read_async_from_child.cpp (original)
+++ sandbox/SOC/2010/process/libs/process/example/read_async_from_child.cpp 2010-06-19 14:18:59 EDT (Sat, 19 Jun 2010)
@@ -10,10 +10,9 @@
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
-#include <boost/all/process.hpp>
#include <boost/asio.hpp>
+#include <boost/process/all.hpp>
#include <boost/array.hpp>
-#include <boost/bind.hpp>
#include <string>
#include <iostream>
@@ -23,31 +22,21 @@
io_service ioservice;
boost::array<char, 4096> buf;
-void begin_read(pipe &read_end);
-void end_read(const boost::system::error_code &ec, std::size_t bytes_transferred, pipe &read_end);
+void handler(const boost::system::error_code &ec, std::size_t bytes_transferred);
int main()
{
std::string exe = find_executable_in_path("hostname");
context ctx;
- ctx.stdout_behavior = boost::make_shared<capture>(capture(capture::output_stream)); ;
+ ctx.stdout_behavior = behavior::named_pipe::def(behavior::named_pipe::output_stream);
child c = create_child(exe, ctx);
pistream &is = c.get_stdout();
- pipe read_end(ioservice, is.native());
- begin_read(read_end);
+ pipe read_end(ioservice, is.native().release());
+ read_end.async_read_some(buffer(buf), handler);
ioservice.run();
}
-void begin_read(pipe &read_end)
+void handler(const boost::system::error_code &ec, std::size_t bytes_transferred)
{
- read_end.async_read_some(buffer(buf), boost::bind(&end_read, placeholders::error, placeholders::bytes_transferred, read_end));
-}
-
-void end_read(const boost::system::error_code &ec, std::size_t bytes_transferred, pipe &read_end)
-{
- if (!ec)
- {
- std::cout << std::string(buf.data(), bytes_transferred) << std::flush;
- begin_read(read_end);
- }
+ std::cout << std::string(buf.data(), bytes_transferred) << std::flush;
}
Modified: sandbox/SOC/2010/process/libs/process/example/read_from_child.cpp
==============================================================================
--- sandbox/SOC/2010/process/libs/process/example/read_from_child.cpp (original)
+++ sandbox/SOC/2010/process/libs/process/example/read_from_child.cpp 2010-06-19 14:18:59 EDT (Sat, 19 Jun 2010)
@@ -10,7 +10,7 @@
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
-#include <boost/all/process.hpp>
+#include <boost/process/all.hpp>
#include <string>
#include <iostream>
@@ -19,7 +19,11 @@
int main()
{
std::string exe = find_executable_in_path("hostname");
- child c = create_child(exe);
+ context ctx;
+ ctx.stdout_behavior = behavior::pipe::def(behavior::pipe::output_stream);
+ child c = create_child(exe, ctx);
pistream &is = c.get_stdout();
- std::cout << is.rdbuf();
+ std::string hostname;
+ is >> hostname;
+ std::cout << hostname << std::endl;
}
Deleted: sandbox/SOC/2010/process/libs/process/example/wait_child.cpp
==============================================================================
--- sandbox/SOC/2010/process/libs/process/example/wait_child.cpp 2010-06-19 14:18:59 EDT (Sat, 19 Jun 2010)
+++ (empty file)
@@ -1,26 +0,0 @@
-//
-// Boost.Process
-// ~~~~~~~~~~~~~
-//
-// Copyright (c) 2006, 2007 Julio M. Merino Vidal
-// Copyright (c) 2008, 2009 Boris Schaeling
-// Copyright (c) 2010 Felipe Tanus, Boris Schaeling
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#include <boost/process/all.hpp>
-#include <string>
-#include <iostream>
-
-using namespace boost::process;
-
-int main()
-{
- std::string exe = find_executable_in_path("hostname");
- child c = create_child(exe);
- status s = c.wait();
- if (s.exited())
- std::cout << s.exit_code() << std::endl;
-}
Modified: sandbox/SOC/2010/process/libs/process/example/write_async_to_child.cpp
==============================================================================
--- sandbox/SOC/2010/process/libs/process/example/write_async_to_child.cpp (original)
+++ sandbox/SOC/2010/process/libs/process/example/write_async_to_child.cpp 2010-06-19 14:18:59 EDT (Sat, 19 Jun 2010)
@@ -10,31 +10,30 @@
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
-#include <boost/all/process.hpp>
#include <boost/asio.hpp>
+#include <boost/process/all.hpp>
#include <boost/bind.hpp>
#include <string>
-#include <iostream>
using namespace boost::process;
using namespace boost::asio;
io_service ioservice;
-void end_write(const boost::system::error_code &ec);
+void handler(const boost::system::error_code &ec, std::size_t bytes_transferred);
int main()
{
std::string exe = find_executable_in_path("ftp");
context ctx;
- ctx.stdin_behavior = boost::make_shared<capture>(capture(capture::input_stream)); ;
+ ctx.stdin_behavior = behavior::named_pipe::def(behavior::named_pipe::input_stream);
child c = create_child(exe, ctx);
postream &os = c.get_stdin();
- pipe write_end(ioservice, os.native());
- async_write(write_end, buffer("quit\n"), boost::bind(&end_write, placeholders::error));
+ pipe write_end(ioservice, os.native().release());
+ async_write(write_end, buffer("quit\n"), handler);
ioservice.run();
}
-void end_write(const boost::system::error_code &ec)
+void handler(const boost::system::error_code &ec, std::size_t bytes_transferred)
{
}
Modified: sandbox/SOC/2010/process/libs/process/example/write_to_child.cpp
==============================================================================
--- sandbox/SOC/2010/process/libs/process/example/write_to_child.cpp (original)
+++ sandbox/SOC/2010/process/libs/process/example/write_to_child.cpp 2010-06-19 14:18:59 EDT (Sat, 19 Jun 2010)
@@ -10,7 +10,7 @@
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
-#include <boost/all/process.hpp>
+#include <boost/process/all.hpp>
#include <string>
#include <iostream>
@@ -20,7 +20,7 @@
{
std::string exe = find_executable_in_path("ftp");
context ctx;
- ctx.stdin_behavior = boost::make_shared<capture>(capture(capture::input_stream));
+ ctx.stdin_behavior = behavior::pipe::def(behavior::pipe::input_stream);
child c = create_child(exe, ctx);
postream &os = c.get_stdin();
os << "quit" << std::endl;
Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk