Страниц: [1]
  Печать  
Автор Тема: Чтение print`ов дочерней программы  (Прочитано 2557 раз)
ililiv
Участник
*
Offline Offline

Сообщений: 5


Просмотр профиля
« : Декабря 20, 2013, 09:34:56 am »

Помогите пожалуйста! У меня вот какая неловкость: Cry
Мой код по внешней команде запускает дочерний процесс с помощью spawn. Программа эта написана не мною и ее я править не могу.
Так сложность в том, что мне необходимо точно знать когда она загрузилась, так как это процесс долгий и может просто-напросто зависнуть так и не увенчавшись успехом. Единственная информация, которую я от нее получаю, это десяток принтов. Мне бы как-нибудь их выловить и проанализировать....
Могу сказать, что тот же вопрос с закрытием решился с помощью сигнала SIGCHLD.
Pid, который мне возвращает spawn говорит только о старте дочки, но не о ее личных успехах))
Думается мне, что ничего сложного в этом нет, но не могу сам найти такой функции)
Записан
darkelf
QOR.Moderator
*****
Offline Offline

Сообщений: 259


Просмотр профиля
« Ответ #1 : Декабря 20, 2013, 10:23:28 am »

Помогите пожалуйста! У меня вот какая неловкость: Cry
Мой код по внешней команде запускает дочерний процесс с помощью spawn. Программа эта написана не мною и ее я править не могу.
Так сложность в том, что мне необходимо точно знать когда она загрузилась, так как это процесс долгий и может просто-напросто зависнуть так и не увенчавшись успехом. Единственная информация, которую я от нее получаю, это десяток принтов. Мне бы как-нибудь их выловить и проанализировать....
Могу сказать, что тот же вопрос с закрытием решился с помощью сигнала SIGCHLD.
Pid, который мне возвращает spawn говорит только о старте дочки, но не о ее личных успехах))
Думается мне, что ничего сложного в этом нет, но не могу сам найти такой функции)
как вариант - запускать через popen() - Вам сразу будет возвращаться FILE* через который можно будет читать вывод программы.
Записан
ililiv
Участник
*
Offline Offline

Сообщений: 5


Просмотр профиля
« Ответ #2 : Декабря 20, 2013, 12:04:15 pm »

Хм... интересная фунцкия! Надо будет ее запомнить!))
Однако, как я понял, она мне не поможет потому как не поддерживает многопоточность, что мне жизненно необходимо, потому как я о таймеру посылаю сообщения и постоянно ожидаю на ресив.
Пардон что сразу не уточнил.
Записан
darkelf
QOR.Moderator
*****
Offline Offline

Сообщений: 259


Просмотр профиля
« Ответ #3 : Декабря 20, 2013, 03:05:24 pm »

Однако, как я понял, она мне не поможет потому как не поддерживает многопоточность, что мне жизненно необходимо, потому как я о таймеру посылаю сообщения и постоянно ожидаю на ресив.
Пардон что сразу не уточнил.
Тогда, имхо, придётся реализовывать через fork()/exec() с перехватом вывода - попробуйте поискать в интернете примеры, например:
http://stackoverflow.com/questions/10700982/redirecting-stdout-to-pipe-in-c
Записан
Страниц: [1]
  Печать  
 
Перейти в: