Blame view

3rdparty/boost_1_81_0/libs/process/example/io.cpp 2.48 KB
73ef4ff3   Hu Chunming   提交三方库
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
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::process::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();
      }
  }