c++ - 如何继承boost.process中的某些fd,同时关闭所有其他fd

标签 c++ boost boost-process

我正在使用 boost.process,尝试生成一个子进程并在父进程和子进程之间进行一些通信。我创建未命名的套接字对并将一端传递给子进程。我仍然想使用 limit_handles 来关闭所有其他 fd,但也保留该套接字对的一端。如何在 boost.process 中实现这一点?我没有找到任何关于如何实现这一目标的示例。

最佳答案

我想我知道该怎么做。基本上我需要创建一个新的初始化程序。像这样

struct PreservedFds : boost::process::detail::handler,
                      boost::process::detail::uses_handles {
  std::vector<int> fds;
  PreservedFds(std::vector<int> pfds) :
    fds(pfds)
  {}

  std::vector<int>& get_used_handles() {
    return fds;
  }
};

然后我可以使用以下方法初始化我的子进程:

std::vector<int> pfds{5, 7, 9};
boost::process::child c("/usr/bin/ls", "/home", PreservedFds(pfds), 
                         boost::process::limit_handles);

关于c++ - 如何继承boost.process中的某些fd,同时关闭所有其他fd,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72483564/

相关文章:

c++ - 使用 [] 运算符从指向 std::array<T, N> 的指针获取类型?

python - 使用 boost::process 0.5。无法为 python.exe 重定向 stdio

c++ - 如何删除指向(结构/对象)的指针而不破坏(结构/对象)内部的指针?

c++ - 通过 boost::read_graphviz() 读取 boost 动态属性时出现异常

c++ - 为什么 adjacency_list<> 中 <> 为空

c++ - 使用 Boost 从 C++ 中的样本 vector 计算平均值和标准差

c++ - 启动第二个 Linux 程序并从 C/C++ 退出当前程序?

c++ - 在 boost 进程异步子进程中的 run() 之后是否需要 wait()?

c++ - 特殊的 C++[错误]?

c++ - 如何在C++中获取自动变量的类型