1
Насколько я мог судить, sigwaitinfo()
не доступен на Mac OS X. Есть ли какая-либо другая, возможно, специфичная для OS X функция, которая может использоваться для эмуляции поведения этой функции?Эмуляция sigwaitinfo на Mac OS X?
I.e. дождитесь, пока сигнал будет отправлен и, а затем сможет получить доступ к структуре siginfo_t
, описывающей переданный сигнал.
Спецификация POSIX для 'sigwaitinfo()' ссылки 'sigwait()' ('_ Функция sigwaitinfo() должна быть эквивалентна функции sigwait(), если информационный аргумент равен NULL. Если аргумент info не равен NULL, функция sigwaitinfo() должна быть эквивалентна sigwait(), за исключением того, что выбранный номер сигнала должен храниться в элементе si_signo, и причина сигнала должна быть сохранена в члене si_code_ '), а 'sigwait()' - предоставленный в Mac OS X. Это может позволить почти подражать 'sigwaitinfo()', но это, безусловно, будет явно нетривиально. –
Как упоминал @JonathanLeffler, определенно нетривиально эмулировать 'sigwaitinfo (2)'. Одним из возможных способов решения проблемы является настройка ваших обработчиков сигналов с помощью знака 'SA_SIGINFO'. Это позволяет настроить обработчик, который получает 'siginfo_t *' в качестве второго аргумента. Оттуда вы можете извлечь и скопировать соответствующую информацию в глобальную переменную и позже получить доступ к ней. Но, конечно, это не потокобезопасность, и это заставляет вас реорганизовать код обработчиков сигналов (и код, который их устанавливает). –