Blame view

3rdparty/boost_1_81_0/boost/process/handles.hpp 2.97 KB
dbf9e800   Hu Chunming   提交_GLIBCXX_USE_CX...
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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
  // Copyright (c) 2019 Klemens D. Morgenstern
  //
  // 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)
  
  #ifndef BOOST_PROCESS_HANDLES_HPP_
  #define BOOST_PROCESS_HANDLES_HPP_
  
  /**
   * \file boost/process/handles.hpp
   *
   * Defines functions to obtain handles of the current process and limit the amount for inherited ones.
   */
  
  #include <boost/process/detail/config.hpp>
  
  #if defined(BOOST_POSIX_API)
  #include <boost/process/detail/posix/handles.hpp>
  #elif defined(BOOST_WINDOWS_API)
  #include <boost/process/detail/windows/handles.hpp>
  #endif
  
  #include <boost/process/detail/used_handles.hpp>
  
  
  namespace boost { namespace this_process
  {
  
  ///The native type for handles
  using native_handle_type = ::boost::process::detail::api::native_handle_type;
  
  /**
   * Get a snapshot of all handles of the process (i.e. file descriptors on posix and handles on windows) of the current process.
   *
   * \note This function might not work on certain posix systems.
   *
   * \note On Windows version older than windows 8 this function will iterate all the system handles, meaning it might be quite slow.
   *
   * \warning This functionality is utterly prone to race conditions, since other threads might open or close handles.
   *
   * \return The list of all open handles of the current process
   */
  inline std::vector<native_handle_type> get_handles()
  {
      return ::boost::process::detail::api::get_handles();
  }
  
  
  /** \overload std::vector<native_handle_type> get_handles() */
  inline std::vector<native_handle_type> get_handles(std::error_code &ec)
  {
      return ::boost::process::detail::api::get_handles(ec);
  }
  
  /** Determines if a given handle is a a stream-handle, i.e. any handle that can be used with read and write functions.
   * Stream handles include pipes, regular files and sockets.
   *
   * \return Indicates if it's a stream handle.
   */
  inline bool is_stream_handle(native_handle_type handle)
  {
      return ::boost::process::detail::api::is_stream_handle(handle);
  }
  
  
  /** \overload bool is_stream_handle(native_handle_type handle) */
  inline bool is_stream_handle(native_handle_type handle, std::error_code &ec)
  {
      return ::boost::process::detail::api::is_stream_handle(handle, ec);
  }
  
  }
  namespace process
  {
  
  namespace detail
  {
  
  using limit_handles_ = ::boost::process::detail::api::limit_handles_;
  
  
  }
  
  /**
   * The limit_handles property sets all properties to be inherited only expcitly. It closes all unused file-descriptors on posix after the fork and
   * removes the inherit flags on windows.
   *
   * \note This is executed after the fork on posix.
   *
   * \code{.cpp}
   * system("gcc", limit_handles);
   * \endcode
   *
   * Since limit also closes the standard handles unless they are explicitly redirected they can be ignored by `limit_handles` in the following way.
   *
   * \code{.cpp}
   * system("gcc", limit_handles.allowStd())
   * \endcode
   *
  */
  const static ::boost::process::detail::api::limit_handles_ limit_handles;
  
  
  }
  }
  
  #endif //BOOST_PROCESS_HANDLES_HPP_