Quantum Из борландовской справки ... Понятно. Цитату из msdn я приводил выше. Полагаю, что borland'овская справка ошибочна. Fess exe Предполагается, что тот, кто пишет процесс-родитель, не знает ничего о процессе-наследнике. Так уж и ничего? А если наследник общается не через stdin/stdout?
Fess exe Дошло Родительский процесс должен иметь какое-то представление о данных, которые выводит дочерний. Помнится, "пайпил" я досовское приложение, которое заканчивало каждый сеанс данных командой похожей на промпт: печатало "XXXis>". Так я просто зацикливал ReadFile и парсил данные пока не получал этот "псевдо-промпт". Вот оно: Код (Text): ReadNxtMsg PROC LOCAL cursor:DWORD mov cursor,0 @@: invoke Sleep,0 mov eax,OFFSET buffer add eax,cursor mov edx,buffer_len sub edx,cursor invoke ReadFile,hRead,eax,edx,OFFSET dAux,0 test eax,eax jz @R mov eax,dAux add eax,cursor mov cursor,eax cmp eax,buffer_len - 1 jge @E add eax,OFFSET [buffer - DWORD] mov eax,[eax] cmp eax,' >si' ; детектим "псевдо-промпт" jne @B @R: ret @E: ; Тут обрабатывается потеря синхронизации jmp @R ReadNxtMsg ENDP q_q Да, где-то опечатка.
Fess exe CMD.EXE - консольное приложение. Если запустить консольное приложение из командной строки CMD.EXE, то винда не создаст ещё одну консоль, а реутилизирует консоль CMD.EXE. Посмотрите в MSDN описание функции CreateProcess - там есть один флаг, который отвечает за наследование консоли.
Может отдельные комманды cmd.exe выполнять с перенаправлением в файл. Например заставить выполнить его батник в котором вызовы комманд типа dir > a.txt, будут перемежаться с echo step1. Тогда можно будет контролировать этапы выполнения им всех операций.
Quantum Я разбирался как-то с вопросом о чтении/записи в консольные приложения. Меня тоже тогда озаботила проблема зависания основного приложения при ReadFile. Спасла именно PeekNamedPipe. ссылка