使用匿名管道做进程通信,需要用父进程创建一个子进程,该子进程的标准输入输出句柄由父进程指定。
无论父进程还是子进程,都可以收发数据,这里仅演示父进程发数据,子进程打印数据。
父进程循环从控制台读数据,并发送给子进程,子进程用对话框打印数据,约定子进程收到"quit"后退出。
父进程(发送端)
#define _CRT_SECURE_NO_WARNINGS
#include <Windows.h>
#include <stdio.h>
HANDLE g_hRead, g_hWrite;
BOOL CreateChildProcess()
{
// 创建可继承的匿名管道,可以理解成输入输出设备
SECURITY_ATTRIBUTES sa;
sa.bInheritHandle = TRUE;
sa.lpSecurityDescriptor = NULL;
sa.nLength = sizeof(SECURITY_ATTRIBUTES);
if (!CreatePipe(&g_hRead, &g_hWrite, &sa, 0))
{
printf("创建匿名管道失败\n");
return FALSE;
}
// 创建子进程,设置标准输入输出设备
STARTUPINFO si;
PROCESS_INFORMATION pi;