下面是父进程的代码,注意创建管道时CreatePipe()函数的第三个参数一定要有,否则从管道中度不输数据
#include <iostream>
#include <windows.h>
#include <tchar.h>
using namespace std;
int main()
{
STARTUPINFO si = {0};
PROCESS_INFORMATION pi = {0};
char ReadBuff[100] = {0};
DWORD ReadNum = 0;
HANDLE hRead = NULL;
HANDLE hWrite = NULL;
SECURITY_ATTRIBUTES sa = {0};
sa.nLength = sizeof(sa);
sa.bInheritHandle = TRUE;
sa.lpSecurityDescriptor = 0;
BOOL bRet = CreatePipe(&hRead,&hWrite,&sa,0);
if(bRet == TRUE)
{
cout << "管道创建成功" << endl;
}
else
{
cout << "创建管道失败,错误代码为:" << GetLastError() << endl;
}
HANDLE hTemp = GetStdHandle(STD_OUTPUT_HANDLE);
SetStdHandle(STD_OUTPUT_HANDLE,hWrite);
GetStartupInfo(&si);//获取本进程当前的STARTUPINFO结构信息
si.cb = sizeof(STARTUPINFO);
si.wShowWindow = SW_HIDE;
si.dwFlags = STARTF_USESHOWWINDOW|STARTF_USESTDHANDLES;
//si.hStdInput = hRead;
si.hStdError = hWrite;
si.hStdOutput = hWrite;
bRet = CreateProcess(NULL,"Child.exe",NULL,NULL,TRUE,NULL,NULL,NULL,&si,&pi);
SetStdHandle(STD_OUTPUT_HANDLE,hTemp);
if(bRet == TRUE)
{
cout << "成功创建子进程" << endl;
}
else
{
cout << "创建子进程失败,错误代码为 :" << GetLastError() << endl;
}
CloseHandle(hWrite);
while(ReadFile(hRead,ReadBuff,100,&ReadNum,NULL))
{
ReadBuff[ReadNum] = '\0';
cout << "从管道中读到的内容" << ReadBuff << "共" << ReadNum << "字节数据" << endl;
}
cin.get();
return 0;
}
下面是子进程代码:只要在子进程中随意的输出一些东西就可以被父进程获取到
#include <iostream>
using namespace std;
int main()
{
cout << "6666666666666666666" << endl;
cout << "Child send to Parent" << endl;
return 0;
}