Как перенаправить стандартный ввод из моего приложения в другое, зная его PID (C, в Windows) - PullRequest
1 голос
/ 22 января 2010

У меня есть скрипт vbs, который перенаправляет некоторые данные в stdin myApp (написано на C в Windows). Если myApp уже был запущен до того, как myApp найдет PID первого сеанса myApp и перенаправит ввод, полученный через stdin, в stdin первого сеанса myApp, который обрабатывает stdin. Поэтому, когда myApp получает стандартный ввод, и другие экземпляры myApp не запускаются, он обрабатывает стандартный ввод и выполняет с ним все. Итак, вопрос в том, как перенаправить стандартный ввод из приложения в другое, зная PID этого второго spp? язык = C платформа = MSwindows

Ответы [ 2 ]

1 голос
/ 23 января 2010

Вам это нужно? http://msdn.microsoft.com/en-us/library/ms682499%28VS.85%29.aspx

В этой статье создается дочерний процесс с перенаправленным вводом-выводом с использованием анонимных каналов, вы можете использовать именованные каналы. Используя эту функцию: http://msdn.microsoft.com/en-us/library/aa365144%28VS.85%29.aspx вы можете проверить, существует ли именованный канал, - если его нет, вы можете создать его и дождаться его ввода.

Я не уверен, т. Е. запись нескольких файлов в один и тот же именованный канал - я предполагаю, что все данные поступают как один файл, поэтому я бы использовал один именованный канал в качестве посредника, который создает новый именованный канал для каждого клиента и добавляет его канал в список каналов для подожди. Закройте его сообщением через новый канал.

Я не думаю (кто-то поправит меня, если я ошибаюсь, пожалуйста), что так просто перенаправить дескрипторы другого процесса.

0 голосов
/ 23 января 2010

Хорошо, имея возможность написать исходный текст программы, я перейду к идее именованных каналов. Основной процесс App1 проверит, запущен ли еще один экземпляр App (т.е. App0). В этом случае stdin, полученный App1, будет перенаправлен на именованный канал X. App0 продолжает получать входные данные, используя именованный канал X. Таким образом, App0 и все другие экземпляры App (App2, e, 4 ...) будут взаимодействовать через именованный канал. Спасибо большое, NineFingers, вы были очень любезны!

...