在查找 sigaction 的手册页时,我在 Linux 手册页中偶然发现了一个令人困惑的注释:
On some architectures a union is involved: do not assign to both sa_handler and sa_sigaction(sigaction man page).
有两种可能的读取方式:
- 这是否意味着,据我所知,您不能在同一个
struct sigaction
中设置 .sa_sigaction
和 .sa_handler
.
- 还是只允许在整个项目中使用
.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.对的时候,我混了就无效了。
哪个是真的?注意:在我的架构上,它被定义为联合
我是一名优秀的程序员,十分优秀!