Форум: "Прочее";
Текущий архив: 2008.07.27;
Скачать: [xml.tar.bz2];
ВнизВозвращаясь к неименованным пайпам Найти похожие ветки
← →
Поросенок Винни-Пух © (2008-06-09 02:42) [0]В PlatformSdk приведен простой пример обмена данными между двумя процессами через неименованные каналы.
Схема такая: делаются два вызова CreatePipe (для StdIn и StdOut дочернего процесса)
Потом два DuplicateHandle и createprocess c передачей в стартапинфо двух хендлов.
Далее родительский процесс делает writefile в stdin дочернего и закрывает этот хендл чтобы там завершился readfile.
После этого идет чтение из stdout дочернего процесса, с предвариельным закрыванием его stdout.
Пример работает замечательно, но есть вопрос:
Как сделать так, чтобы рид и райт в дочернем мог завершаться без закрытия хендлов?
Мне требуется передать из дочернего две порции информации.
Схематично это выглядит так
Главный пишет блок информации дочернему.
Дочерний обрабатывает инфу и отвечает блоком № 1
Главный читает ответный блок №1
Дочерний посылает блок №2
Главный читает блок №2
Первое что приходит в голову - предварить оба блока заголовком, в котором указать длины/смещение и делать все за один цикл обмена.
← →
Slym © (2008-06-09 07:58) [1]передай CTRL+Z (непомню код... вроде #26)
← →
Evgeny V © (2008-06-09 09:55) [2]
> Возвращаясь к неименованным пайпам
> как сделать так, чтобы рид и райт в дочернем мог завершаться
> без закрытия хендлов?
Их и не надо закрывать, если они тебе нужны.
Делай два пайпа - один чтобы передавать данные из главного потока в дочерний, другой что бы передавать данные из дочернего потока в главный. Когда необходимость в пайпах отпадет - закроешь хэндлы.
← →
Mystic © (2008-06-09 10:31) [3]Вот когда-то писал что-то подобное... Может поможет?
http://mu.webest.net/prog/mu-console.1.00a.zip
← →
Поросенок Винни-Пух © (2008-06-09 12:09) [4]ага. сенкс.
Страницы: 1 вся ветка
Форум: "Прочее";
Текущий архив: 2008.07.27;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.006 c