Вот пытаюсь разобратся в данной теме.Насколько хватило соображалки написал такой код: Код (Text): main() { HANDLE hpR1,hpR2,hpW1,hpW2; DWORD readsz,rb,wb; char *buf=new char[(1024*1024)*4]; SECURITY_ATTRIBUTES sec = { (DWORD)sizeof(SECURITY_ATTRIBUTES), NULL, TRUE }; STARTUPINFO sInfo; PROCESS_INFORMATION pInfo; CreatePipe(&hpR1,&hpW1,&sec,0); CreatePipe(&hpR2,&hpW2,&sec,0); memset(&sInfo, 0, sizeof(sInfo)); memset(&pInfo, 0, sizeof(pInfo)); sInfo.cb=sizeof (STARTUPINFO); sInfo.dwFlags=STARTF_USESHOWWINDOW+STARTF_USESTDHANDLES; sInfo.wShowWindow=SW_HIDE; sInfo.hStdInput = hpR2; sInfo.hStdOutput = hpW1; sInfo.hStdError = hpW1; CreateProcess(NULL,"cmd",&sec,&sec,true,0,NULL,NULL,&sInfo,&pInfo); for(;;) { Sleep(300); PeekNamedPipe(hpR1,NULL,NULL,NULL,&readsz,NULL); if(readsz>0) { ReadFile(hpR1,buf,(1024*1024)*4,&rb,0); cout<<buf;memset(buf,NULL,strlen(buf)); cin>>buf;strcat(buf,"\n"); WriteFile(hpW2,buf,strlen(buf),&wb,0); if(strcmp(buf,"exit\n")==0){break;} memset(buf,NULL,strlen(buf)); }// }// delete []buf; CloseHandle(hpR1);CloseHandle(hpR2);CloseHandle(hpW1);CloseHandle(hpW2); } Возникло несколько вопрос,связанных с моими ошибками: 1.Неполучается выполнить команды с доп. параметрами.Почему то cmd считает что пробел это символ переноса строки 2.В папках с большим кол-вом файлов вывод команды dir неполный ,и после этого шелл виснет(кол-во символов там явно намного меньше 4х мбайт). 3.Если программы завершить через диспетчер задач то её окно остается висеть.Почему так?