c++ - boost 中与 dup2 类似的功能
问题描述
我想做这样的事情
acceptSocket = accept(...);
if (fork() == 0) {
// ..
dup2(acceptSocket, 1);
dup2(acceptSocket, 2);
execvp(/*some command*/);
}
现在我正在转向 C++ boost,我想做同样的事情。有没有类似的东西?可能是 Boost Process 和套接字流,但我不太清楚。提前致谢。
解决方案
您可以使用升压过程: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();
}
推荐阅读
- java - 如何在 Java 中设置截止日期而不对值进行硬编码
- sql - 如何在选择其他列时明确选择一列
- html - 为什么我的 gridview ASP.NET 中有一个
- intellij-idea - 我们可以在 IJ IDE 的不同窗口中打开项目模块吗?
- javascript - 如何控制描述块中 beforeAll 块的执行顺序
- java - 通过 Azure Devops 管道中的 Appcenter 任务执行 Appium 测试用例
- html - 如何从 html 传递属性值
- oracle-sqldeveloper - Oracle Sqldeveloper:命令行“连接名称”创建
- javascript - 什么是名称冲突以及 ES6 符号如何避免属性之间的名称冲突?
- office-js - `yo office` 给出错误 Spawn git ENONENT