我试图找出我继承的一些 Win32 管道代码中的问题。这是 x2 的旧备用,CreatePipe()
后跟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 文档,这意味着源句柄将在复制后关闭。
将句柄(到管道)的副本复制到同一进程中,然后关闭原始句柄究竟有什么意义?为什么不直接使用原版?