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函數讀取管道的讀端,獲取子進程的輸出。最后,關閉管道句柄。
請將其中的"子進程程序路徑"替換為實際子進程程序的路徑。