作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图找出我继承的一些 Win32 管道代码中的问题。这是old standby的 CreatePipe()
x2 后跟 DuplicateHandle()
x2 和 CreateProcess()
.
if (!CreatePipe(&child_stdout_read, &parent_write, &security, 0) ||
!DuplicateHandle(GetCurrentProcess(), parent_write,
GetCurrentProcess(), &child_stdout_write, 0, TRUE,
DUPLICATE_SAME_ACCESS | DUPLICATE_CLOSE_SOURCE)) {
throw std::system_error(GetLastError(), std::system_category());
}
DUPLICATE_CLOSE_SOURCE
用于
DuplicateHandle()
来电。根据 Microsoft 文档,这意味着源句柄将在复制后关闭。
最佳答案
好吧,在我看来, key 在 TRUE
中。范围。那是BOOL bInheritHandle
,所以这段代码所做的是复制句柄以使其可继承。
通常,这可以通过设置 security.bInheritHandle
轻松完成。至TRUE
创建句柄时。但在这种情况下,这将使两个句柄都可以继承。而且很明显,原作者只想继承child_stdout_write
.
请注意,使用较少人为的代码可以实现相同的效果:
SetHandleInformation(handle, HANDLE_FLAG_INHERIT, HANDLE_FLAG_INHERIT);
关于winapi - DuplicateHandle 的 DUPLICATE_CLOSE_HANDLE 标志有什么意义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11268687/
我试图找出我继承的一些 Win32 管道代码中的问题。这是old standby的 CreatePipe() x2 后跟 DuplicateHandle() x2 和 CreateProcess()
我是一名优秀的程序员,十分优秀!