c - 在 Windows 上关闭子进程的非标准匿名管道句柄的最佳方法是什么?

标签 c windows pipe anonymous

在 Linux 上,伪代码大致如下所示:

setup_env();
pid = fork();
if (pid == 0) {
// we are the child
    closeUnusedPipeEnd();
    setup_child();
    execve();
}
closeOtherUnusedPipeEnd();

posix_spawn 使用 file_actions 来注册子进程在 spawnp 中将执行的操作,这可以归结为 Clone() 而不是 fork()。

但是,我没有找到有关如何关闭子进程中匿名管道未使用端的 Windows 示例。 我是在子进程中执行此操作的唯一选择吗,例如通过标准输入解析或环境变量? 或者 Windows 中匿名管道的最佳实践是什么?

假定管道句柄是从 kernel32.CreateNamedPipeWkernel32.CreateFileW 创建的,并读取重叠 IO 的句柄 ( FILE_FLAG_OVERLAPPED)。

最佳答案

应该将 kernel32.SetHandleInformation()HANDLE_FLAG_INHERIT 一起使用,以仅继承子进程中使用的管道端。

关于c - 在 Windows 上关闭子进程的非标准匿名管道句柄的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72355844/

相关文章:

windows - 没有代理的本地机器上的多对多消息传递

java - 管道文件消失但仍然有效

c - 单向命名管道

Python 与空闲进程的进程间通信

c - 模拟网格。比较器怎么写?

c - 如何知道 scanf() 的分界线

c++ - 空指针的地址?

c - 从 C 中 LoadLibrary 加载的函数传回数据?

windows - 我如何强制退出 Git Bash?

windows - 在不使用 Find 命令的情况下检查服务是否正在运行