Перенаправление указателей ввода\вывода через пайпы

Тема в разделе "WASM.BEGINNERS", создана пользователем _nic, 20 апр 2009.

  1. _nic

    _nic New Member

    Публикаций:
    0
    Регистрация:
    4 фев 2007
    Сообщения:
    372
    Вот пытаюсь разобратся в данной теме.Насколько хватило соображалки написал такой код:
    Код (Text):
    1. main()
    2. {
    3. HANDLE hpR1,hpR2,hpW1,hpW2;
    4. DWORD readsz,rb,wb;
    5. char *buf=new char[(1024*1024)*4];
    6. SECURITY_ATTRIBUTES sec =
    7. {
    8. (DWORD)sizeof(SECURITY_ATTRIBUTES), NULL, TRUE
    9. };
    10. STARTUPINFO sInfo;
    11. PROCESS_INFORMATION pInfo;
    12. CreatePipe(&hpR1,&hpW1,&sec,0);
    13. CreatePipe(&hpR2,&hpW2,&sec,0);
    14. memset(&sInfo, 0, sizeof(sInfo));
    15. memset(&pInfo, 0, sizeof(pInfo));
    16. sInfo.cb=sizeof (STARTUPINFO);
    17. sInfo.dwFlags=STARTF_USESHOWWINDOW+STARTF_USESTDHANDLES;
    18. sInfo.wShowWindow=SW_HIDE;
    19. sInfo.hStdInput = hpR2;
    20. sInfo.hStdOutput = hpW1;
    21. sInfo.hStdError = hpW1;
    22. CreateProcess(NULL,"cmd",&sec,&sec,true,0,NULL,NULL,&sInfo,&pInfo);
    23. for(;;)
    24. {
    25. Sleep(300);
    26. PeekNamedPipe(hpR1,NULL,NULL,NULL,&readsz,NULL);
    27. if(readsz>0)
    28. {
    29. ReadFile(hpR1,buf,(1024*1024)*4,&rb,0);
    30. cout<<buf;memset(buf,NULL,strlen(buf));
    31. cin>>buf;strcat(buf,"\n");
    32. WriteFile(hpW2,buf,strlen(buf),&wb,0);
    33. if(strcmp(buf,"exit\n")==0){break;}
    34. memset(buf,NULL,strlen(buf));
    35. }//
    36. }//
    37. delete []buf;
    38. CloseHandle(hpR1);CloseHandle(hpR2);CloseHandle(hpW1);CloseHandle(hpW2);
    39. }
    Возникло несколько вопрос,связанных с моими ошибками:
    1.Неполучается выполнить команды с доп. параметрами.Почему то cmd считает что пробел это символ переноса строки :dntknw:
    2.В папках с большим кол-вом файлов вывод команды dir неполный ,и после этого шелл виснет(кол-во символов там явно намного меньше 4х мбайт).
    3.Если программы завершить через диспетчер задач то её окно остается висеть.Почему так?