С++: сигналы Interix
Как скомпилировать/использовать сигналы на платформе Interix? Я не могу его компилировать, потому что Interix выглядит не совместимым с POSIX, по крайней мере, в его реализации signal.h
.
Если кто-то нашел способ обойти это и разрешить код с сигналами для компиляции на Interix, пожалуйста, дайте мне знать, как!
Спасибо.
Подробнее:
Наследие программного обеспечения на C, С++ и построено на Linux и Interix (для Win XP).
Получают следующие ошибки во время компиляции, только для Interix; а не Linux, после добавления кода pthread
и signal
. Невозможно использовать pthreads
без сигналов, потому что конфликты с Xmotif (компиляция, но сбой во время выполнения).
ошибки из-за различий в структуре:
`struct siginfo' has no member named `si_value'
aggregate `sigval val' has incomplete type and cannot be defined
`struct sigaction' has no member named `sa_sigaction'
ошибки из-за необъявленного:
`sigqueue' undeclared
`SA_NODEFER' undeclared
`SA_SIGINFO' undeclared
Другие материалы:
http://www.mail-archive.com/[email protected]/msg10425.html
http://www.gnu.org/software/hello/manual/gnulib/signal_002eh.html
http://en.wikipedia.org/wiki/Interix
http://www.opengroup.org/susv3xbd/signal.h.html
Ответы
Ответ 1
Согласно спецификации POSIX, struct sigaction
не имеет члена sa_sigaction
, он имеет sa_handler
.
Interix совместим с POSIX в этом случае, код, который вы переносите, не является.
Обратите внимание, что Linux можно заставить работать с sa_handler
.
Возможно, вы сможете заставить его работать, используя правильный #DEFINE
.
Ответ 2
См. страницу взаимодействия Interix и ссылку открытой группы выше.
Вы можете заменить si_sigaction на sa_handler.