Просматривая справочные страницы для sigaction, я наткнулся на запутанную заметку на справочных страницах Linux:
В некоторых архитектурах участвует объединение: не назначайте оба
sa_handler и sa_sigaction ( страница руководства sigaction ).
Существует два возможных способа чтения:
- Значит ли это, насколько я понимаю, что вам не разрешено устанавливать
.sa_sigaction
и .sa_handler
в одном и том же struct sigaction
.
- Или разрешено использовать только
.sa_sigaction
ИЛИ .sa_handler
во всем проекте?
struct sigaction sigactionArray[SIGNAL_SIGACTION_ARRAY_SIZE] = {
{.sa_handler = SIG_DFL, .sa_flags = SA_NODEFER},
{.sa_handler = SIG_DFL, .sa_flags = SA_NODEFER},
{.sa_handler = SIG_DFL, .sa_flags = SA_NODEFER},
{.sa_sigaction = HandleBacktraceSignals, .sa_flags = SA_SIGINFO | SA_RESTART | SA_ONSTACK},
{.sa_sigaction = HandleBacktraceSignals, .sa_flags = SA_SIGINFO | SA_RESTART | SA_ONSTACK},
{.sa_sigaction = HandleBacktraceSignals, .sa_flags = SA_SIGINFO | SA_RESTART | SA_ONSTACK},
{.sa_sigaction = HandleBacktraceSignals, .sa_flags = SA_SIGINFO | SA_RESTART | SA_ONSTACK},
{.sa_sigaction = HandleBacktraceSignals, .sa_flags = SA_SIGINFO | SA_RESTART | SA_ONSTACK},
{.sa_handler = SIG_IGN, .sa_flags = SA_NODEFER},
{.sa_handler = SIG_IGN, .sa_flags = SA_NODEFER},
{.sa_sigaction = HandleBacktraceSignals, .sa_flags = SA_SIGINFO | SA_RESTART | SA_ONSTACK},
{.sa_handler = SIG_IGN, .sa_flags = SA_NODEFER},
{.sa_sigaction = HandleBacktraceSignals, .sa_flags = SA_SIGINFO | SA_RESTART | SA_ONSTACK},
{.sa_handler = SIG_DFL, .sa_flags = SA_NODEFER},
{.sa_handler = SIG_DFL, .sa_flags = SA_NODEFER},
{.sa_handler = SIG_IGN, .sa_flags = SA_NODEFER},
{.sa_handler = SIG_IGN, .sa_flags = SA_NODEFER},
{.sa_handler = SIG_DFL, .sa_flags = SA_NODEFER},
{.sa_handler = SIG_IGN, .sa_flags = SA_NODEFER},
{.sa_handler = SIG_DFL, .sa_flags = SA_NODEFER},
{.sa_handler = SIG_DFL, .sa_flags = SA_NODEFER},
{.sa_handler = SIG_DFL, .sa_flags = SA_NODEFER},
{.sa_handler = SIG_DFL, .sa_flags = SA_NODEFER},
{.sa_sigaction = HandleBacktraceSignals, .sa_flags = SA_SIGINFO | SA_RESTART | SA_ONSTACK},
{.sa_sigaction = HandleBacktraceSignals, .sa_flags = SA_SIGINFO | SA_RESTART | SA_ONSTACK},
{.sa_handler = SIG_DFL, .sa_flags = SA_NODEFER},
{.sa_handler = SIG_DFL, .sa_flags = SA_NODEFER},
{.sa_handler = SIG_IGN, .sa_flags = SA_NODEFER},
{.sa_handler = SIG_DFL, .sa_flags = SA_NODEFER},
{.sa_handler = SIG_DFL, .sa_flags = SA_NODEFER},
{.sa_sigaction = HandleBacktraceSignals, .sa_flags = SA_SIGINFO | SA_RESTART | SA_ONSTACK}
};
В соответствии с толкованием 1. приведенный выше фрагмент кода будет в порядке, но если определение 2. верно, оно будет недействительным, поскольку я смешиваю.
Какой из них является правдой?
Примечание: на моей архитектуре это определяется как объединение