Если вы создаете канал, используя функцию pipe()
, вы можете добавить выходной конец в ваш список poll()
.Затем вы можете написать что-нибудь во входной конец канала, и ваш опрос вернется.Так же, как ваша версия для Windows.
Чтобы это работало, вам нужно использовать что-то асинхронное, например потоки или обработчики сигналов.
Другой вариант - использовать sigaction()
для установки сигналаобработчик без флаг SA_RESTART
.Вы можете использовать неиспользуемый сигнал типа SIGUSR1
или один из сигналов реального времени.Когда вы хотите прервать poll()
, вы отправите этот сигнал, и poll()
вернется с -1 и для errno будет установлено значение EINTR.
Возможно, что другой сигнал прервет ваш poll()
какхорошо, если только вы не использовали sigmask()
для блокировки нежелательных сигналов.