父进程接管子进程的标准输入输出和错误,实现对子进程的交互操作。比如子进程是一个类似mysql这种可以交互的命令,执行操作后输出结果,父进程根据结果分析决定执行下一步的命令,从而替代人工的输入。
通过父进程创建子进程,使用管道重定向子进程的输入输出错误可以实现
在 Windows 中,可以使用匿名管道(Anonymous Pipes)实现两个进程之间的通信。匿名管道是一种用于进程间通信的轻量级通信机制,仅适用于父子进程之间或兄弟进程之间的通信。
实现管道发送和接收的具体流程如下:
1.在父进程中创建匿名管道,获取管道的读取端和写入端的句柄。文章来源:https://uudwc.com/A/LaWvo
HANDLE hReadPipe; // 读取端句柄
HANDLE hWritePipe; // 写入端句柄
SECURITY_ATTRIBUTES sa; // 安全属性
sa.nLength = sizeof(SECURITY_ATTRIBUTES);
sa.bInheritHandle = TRUE; // 句柄可以被子进程继承
sa.lpSecurityDescriptor = NULL; // 安全描述符
BOOL bSuccess = CreatePipe(&hReadPipe, &hWritePipe, &sa, 0); // 创建匿名管道
if (!bSuccess) {
// 管道创建失败,处理错误
return;
}
2.在父进程中启动子进程,并将管道的写入端句柄传递给子进程的 STARTUPINFO 结构体中。文章来源地址https://uudwc.com/A/LaWvo
STARTUPINFO si;//程序启动信息,使用 CreateProce