Windowsc++实现管道代码
时间: 2023-08-19 08:13:25 浏览: 52
以下是 Windows C++ 实现匿名管道的示例代码:
```c++
#include <iostream>
#include <Windows.h>
using namespace std;
int main() {
HANDLE hReadPipe, hWritePipe; // 定义管道句柄
SECURITY_ATTRIBUTES sa; // 定义安全属性
char buf[1024]; // 定义缓冲区
DWORD bytesRead; // 读取的字节数
// 初始化安全属性
sa.nLength = sizeof(sa);
sa.lpSecurityDescriptor = NULL;
sa.bInheritHandle = TRUE;
// 创建管道
if (!CreatePipe(&hReadPipe, &hWritePipe, &sa, 0)) {
cout << "Create pipe failed!" << endl;
return -1;
}
// 创建子进程
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
ZeroMemory(&pi, sizeof(pi));
si.hStdInput = hReadPipe; // 将管道的读端设置为子进程的标准输入
si.dwFlags = STARTF_USESTDHANDLES; // 启用标准输入输出句柄
if (!CreateProcess(NULL, "child.exe", NULL, NULL, TRUE, 0, NULL, NULL, &si, &pi)) {
cout << "Create child process failed!" << endl;
return -1;
}
// 关闭子进程的句柄
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
// 关闭管道的写端
CloseHandle(hWritePipe);
// 从管道中读取数据
ReadFile(hReadPipe, buf, sizeof(buf), &bytesRead, NULL);
cout << "Parent process received message: " << buf << endl;
// 关闭管道的读端
CloseHandle(hReadPipe);
return 0;
}
```
该示例代码中,使用 `CreatePipe` 函数创建了一个匿名管道,并使用 `CreateProcess` 函数创建了一个子进程。在主进程中,将管道的读端设置为子进程的标准输入,并启用标准输入输出句柄。然后关闭了子进程的句柄和管道的写端,并通过 `ReadFile` 函数从管道中读取数据,并输出到控制台。最后关闭了管道的读端。注意,子进程的代码需要单独编写并编译成可执行文件 `child.exe`。