CreatePipeを使用してプロセス間通信を行う方法
CreatePipe 関数を使用して匿名パイプを作成すると、プロセス間通信が可能になります。以下に、CreatePipe 関数を使用してパイプを作成し、プロセス間通信を行うサンプル コードを示します。
#include <windows.h>
#include <iostream>
int main()
{
HANDLE hReadPipe, hWritePipe;
DWORD bytesRead, bytesWritten;
char buffer[100];
// 创建管道
if (!CreatePipe(&hReadPipe, &hWritePipe, NULL, 0))
{
std::cout << "创建管道失败!" << std::endl;
return 1;
}
// 创建子进程
STARTUPINFO si = { sizeof(STARTUPINFO) };
PROCESS_INFORMATION pi;
si.hStdError = hWritePipe;
si.hStdOutput = hWritePipe;
si.dwFlags |= STARTF_USESTDHANDLES;
if (!CreateProcess(NULL, "子进程程序路径", NULL, NULL, TRUE, 0, NULL, NULL, &si, &pi))
{
std::cout << "创建子进程失败!" << std::endl;
return 1;
}
// 等待子进程结束
WaitForSingleObject(pi.hProcess, INFINITE);
// 读取子进程输出
if (ReadFile(hReadPipe, buffer, sizeof(buffer), &bytesRead, NULL))
{
buffer[bytesRead] = '\0';
std::cout << "子进程输出:" << buffer << std::endl;
}
// 关闭管道句柄
CloseHandle(hReadPipe);
CloseHandle(hWritePipe);
return 0;
}
上のコードでは、まず CreatePipe 関数でパイプを作成し、次に CreateProcess 関数で子プロセスを作成し、子プロセスの標準出力と標準エラーをパイプの書き込み側へリダイレクトします。子プロセスの出力がパイプへ書き込まれ、親プロセスが ReadFile 関数でパイプの読み込み側から子プロセスの出力を取得します。最後に、パイプのハンドルを閉じます。
子プロセスプログラムのパスをプログラムのパスに置き換えてください。