diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-27 18:24:20 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-27 18:24:20 +0000 |
commit | 483eb2f56657e8e7f419ab1a4fab8dce9ade8609 (patch) | |
tree | e5d88d25d870d5dedacb6bbdbe2a966086a0a5cf /src/boost/libs/process/example/io.cpp | |
parent | Initial commit. (diff) | |
download | ceph-483eb2f56657e8e7f419ab1a4fab8dce9ade8609.tar.xz ceph-483eb2f56657e8e7f419ab1a4fab8dce9ade8609.zip |
Adding upstream version 14.2.21.upstream/14.2.21upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/boost/libs/process/example/io.cpp')
-rw-r--r-- | src/boost/libs/process/example/io.cpp | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/src/boost/libs/process/example/io.cpp b/src/boost/libs/process/example/io.cpp new file mode 100644 index 00000000..1b1e8eb7 --- /dev/null +++ b/src/boost/libs/process/example/io.cpp @@ -0,0 +1,91 @@ +// Copyright (c) 2006, 2007 Julio M. Merino Vidal +// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling +// Copyright (c) 2009 Boris Schaeling +// Copyright (c) 2010 Felipe Tanus, Boris Schaeling +// Copyright (c) 2011, 2012 Jeff Flinn, 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.hpp> +#include <string> + +namespace bp = boost::process; + +int main() +{ + // + bp::system( + "test.exe", + bp::std_out > stdout, //forward + bp::std_err.close(), //close + bp::std_in < bp::null //null in + ); + + boost::filesystem::path p = "input.txt"; + + bp::system( + "test.exe", + (bp::std_out & bp::std_err) > "output.txt", //redirect both to one file + bp::std_in < p //read input from file + ); + + { + bp::opstream p1; + bp::ipstream p2; + bp::system( + "test.exe", + bp::std_out > p2, + bp::std_in < p1 + ); + p1 << "my_text"; + int i = 0; + p2 >> i; + + } + { + boost::asio::io_context io_context; + bp::async_pipe p1(io_context); + bp::async_pipe p2(io_context); + bp::system( + "test.exe", + bp::std_out > p2, + bp::std_in < p1, + io_context, + bp::on_exit([&](int exit, const std::error_code& ec_in) + { + p1.async_close(); + p2.async_close(); + }) + ); + std::vector<char> in_buf; + std::string value = "my_string"; + boost::asio::async_write(p1, boost::asio::buffer(value), []( const boost::system::error_code&, std::size_t){}); + boost::asio::async_read (p2, boost::asio::buffer(in_buf), []( const boost::system::error_code&, std::size_t){}); + } + { + boost::asio::io_context io_context; + std::vector<char> in_buf; + std::string value = "my_string"; + bp::system( + "test.exe", + bp::std_out > bp::buffer(in_buf), + bp::std_in < bp::buffer(value) + ); + } + + { + boost::asio::io_context io_context; + std::future<std::vector<char>> in_buf; + std::future<void> write_fut; + std::string value = "my_string"; + bp::system( + "test.exe", + bp::std_out > in_buf, + bp::std_in < bp::buffer(value) > write_fut + ); + + write_fut.get(); + in_buf.get(); + } +} |