首页 > 解决方案 > boost 中与 dup2 类似的功能

问题描述

我想做这样的事情

acceptSocket = accept(...);
if (fork() == 0) {
  // ..
  dup2(acceptSocket, 1);
  dup2(acceptSocket, 2);
  execvp(/*some command*/);
  
}

现在我正在转向 C++ boost,我想做同样的事情。有没有类似的东西?可能是 Boost Process 和套接字流,但我不太清楚。提前致谢。

标签: c++boostforkboost-asiodup2

解决方案


您可以使用升压过程:https ://www.boost.org/doc/libs/1_74_0/doc/html/boost/process/posix/fd.html

此属性允许您修改标准文件 (0,1,2) 以外的文件描述符。

它提供了函数bind,实现了dup2和close。

所以,例如:

#include <boost/process.hpp>

namespace bp = boost::process;
using bp::posix::fd;

int main() {
    int acceptSocket /* = accept(...) */;

    bp::child child(
        bp::search_path("someprogram.exe"),
        fd.bind(1, acceptSocket),
        fd.bind(2, acceptSocket));

    child.wait();
}

推荐阅读