C++ Pipe
Код:
#include <windows.h>
#include <iostream>
#include <string>
using namespace std;
int main()
{
HANDLE h1,h2;
PROCESS_INFORMATION Proc1,Proc2;
STARTUPINFO Start1,Start2;
SECURITY_ATTRIBUTES PipeSa={sizeof(SECURITY_ATTRIBUTES),NULL,TRUE};
//создание Pipe межу h1,h2
if(CreatePipe(&h1,&h2,&PipeSa,0)) cout << "OK!"<< endl;
else cout << "Erorr!" <<endl;
GetStartupInfo(&Start1);
//переопределение стандартных устройст ввода и вывода для первого процеса
Start1.hStdInput=GetStdHandle(STD_INPUT_HANDLE);
Start1.hStdError=GetStdHandle(STD_ERROR_HANDLE);
Start1.hStdOutput=h2;
//запуск первого процеса
if(CreateProcess(NULL,(LPSTR)"user",NULL,NULL,TRUE,CREATE_NEW_CONSOLE,NULL,NULL,&Start1,&Proc1))
cout<<"OK!"<<endl;
else cout<<"Erorr"<<endl;
GetStartupInfo(&Start2);
//переопределение стандартных устройст ввода и вывода для второго процеса
Start2.hStdInput=h1;
Start2.hStdError=GetStdHandle(STD_ERROR_HANDLE);
Start2.hStdOutput=GetStdHandle(STD_OUTPUT_HANDLE);
//запуск второго процеса
if(CreateProcess(NULL,(LPSTR)"user",NULL,NULL,TRUE,CREATE_NEW_CONSOLE,NULL,NULL,&Start2,&Proc2))
cout<<"OK!"<<endl;
else cout<<"Erorr"<<endl;
//ожидание закрития процесов, и удаление Pipe
WaitForSingleObject(Proc1.hProcess,INFINITE);
WaitForSingleObject(Proc2.hProcess,INFINITE);
CloseHandle(Proc1.hThread);
CloseHandle(Proc2.hThread);
CloseHandle(Proc1.hProcess);
CloseHandle(Proc2.hProcess);
return 0;
}
#include <iostream>
#include <string>
using namespace std;
int main()
{
HANDLE h1,h2;
PROCESS_INFORMATION Proc1,Proc2;
STARTUPINFO Start1,Start2;
SECURITY_ATTRIBUTES PipeSa={sizeof(SECURITY_ATTRIBUTES),NULL,TRUE};
//создание Pipe межу h1,h2
if(CreatePipe(&h1,&h2,&PipeSa,0)) cout << "OK!"<< endl;
else cout << "Erorr!" <<endl;
GetStartupInfo(&Start1);
//переопределение стандартных устройст ввода и вывода для первого процеса
Start1.hStdInput=GetStdHandle(STD_INPUT_HANDLE);
Start1.hStdError=GetStdHandle(STD_ERROR_HANDLE);
Start1.hStdOutput=h2;
//запуск первого процеса
if(CreateProcess(NULL,(LPSTR)"user",NULL,NULL,TRUE,CREATE_NEW_CONSOLE,NULL,NULL,&Start1,&Proc1))
cout<<"OK!"<<endl;
else cout<<"Erorr"<<endl;
GetStartupInfo(&Start2);
//переопределение стандартных устройст ввода и вывода для второго процеса
Start2.hStdInput=h1;
Start2.hStdError=GetStdHandle(STD_ERROR_HANDLE);
Start2.hStdOutput=GetStdHandle(STD_OUTPUT_HANDLE);
//запуск второго процеса
if(CreateProcess(NULL,(LPSTR)"user",NULL,NULL,TRUE,CREATE_NEW_CONSOLE,NULL,NULL,&Start2,&Proc2))
cout<<"OK!"<<endl;
else cout<<"Erorr"<<endl;
//ожидание закрития процесов, и удаление Pipe
WaitForSingleObject(Proc1.hProcess,INFINITE);
WaitForSingleObject(Proc2.hProcess,INFINITE);
CloseHandle(Proc1.hThread);
CloseHandle(Proc2.hThread);
CloseHandle(Proc1.hProcess);
CloseHandle(Proc2.hProcess);
return 0;
}
а вам надо обменять хендлы между дочками .
не подскажете как это исправить?