2017-02-12 23 views
0

Я открываю другой процесс в своем приложении, используя popen и анализируя его вывод. Я хочу получить уведомление, как только программа сделает какой-либо вывод. В настоящее время все вещи в моей программе используют epoll для таких действий. Теперь popen возвращает FILE * вместо fd. Сохраняется ли использование функции fileno и поместите полученный результат fd в epoll? Если нет, есть ли другой способ? Я не хочу, чтобы процесс блокировался, поэтому я хочу получать уведомления.Используйте ФАЙЛ * в epoll

+0

Я бы рекомендовал не смешивать буферный ввод-вывод ('FILE *') и (e) опрос. Лично я просто написал свой собственный «popen_fd», который возвращает дескриптор, с которого вы можете «читать». – melpomene

ответ

0

Да, это безопасно, если вы не делаете никаких дополнительных действий с файловым дескриптором, не будучи осторожным, это кажется безопасным. Еще одна вещь: вы, вероятно, хотите также отметить дескриптор файла как неблокирующий. Чтобы вы могли read() без блокировки и управления EBUSY или EAGAIN проверка errno.

+0

Я согласен с вами в том, что использование 'epoll()' в файловом дескрипторе интерфейса 'FILE * 'безопасно - оно просто возвращает дескриптор как активный. Но * отметить дескриптор файла как неблокирующий *? Я не думаю, что гарантированно будет безопасно, если фактическое чтение выполняется с помощью функций stdio на основе 'FILE *', как указано в вопросе. Пометка «неактивного» дескриптора файлового дескриптора 'FILE *' может вызывать серьезные проблемы, поскольку библиотеки почти наверняка не предназначены для использования неблокирующего дескриптора. –

 Смежные вопросы

  • Нет связанных вопросов^_^