Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

C++ Pipe

82K
08 апреля 2013 года
vetal3848642
12 / / 06.03.2013
У меня проблема с переопределением стандартных средств ввода и вывода .Задача состоит в том,чтобы написать программу которая открывает две новые программы,и чтобы средство вывода одной было средством ввода другой,проблема в том что программа открывает еще две программы,как и нада, но устройства вывода и ввода не переопределяются, вот исходник,может что-то подскажете. Заранее благодарен.

Код:
#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;
}
252
11 апреля 2013 года
koderAlex
1.4K / / 07.09.2005
может я ошибаюсь , но кажется вы передаёте хендлы (STD_INPUT_HANDLE,STD_ERROR_HANDLE,STD_OUTPUT_HANDLE) родительского процесса дочкам .
а вам надо обменять хендлы между дочками .
82K
11 апреля 2013 года
vetal3848642
12 / / 06.03.2013
не подскажете как это исправить?
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог