调用sigaction()时,如果将sa_sigaction设置为NULL,这意味着什么?
下面的代码做什么调用sigaction()时,如果将sa_sigaction设置为NULL,这意味着什么?,c,linux,unix,signals,C,Linux,Unix,Signals,下面的代码做什么 struct sigaction saStruct; saStruct.sa_flags = SA_NOCLDWAIT|SA_NODEFER|SA_SIGINFO; saStruct.sa_sigaction = NULL; sigemptyset(&saStruct.sa_mask); sigaction(SIGCHLD, &saStruct, NULL); 特别是,sa_sigaction设置为NULL意味着什么?这是一种复杂的表达方式吗?我在中找不到任何
struct sigaction saStruct;
saStruct.sa_flags = SA_NOCLDWAIT|SA_NODEFER|SA_SIGINFO;
saStruct.sa_sigaction = NULL;
sigemptyset(&saStruct.sa_mask);
sigaction(SIGCHLD, &saStruct, NULL);
特别是,sa_sigaction
设置为NULL意味着什么?这是一种复杂的表达方式吗?我在中找不到任何有关此用法的引用
我主要对Linux(>=2.6)的答案感兴趣。
NULL
恰好相当于SIG_-DFL
;别指望这个
#define SIG_ERR ((__sighandler_t) -1) /* Error return. */
#define SIG_DFL ((__sighandler_t) 0) /* Default action. */
#define SIG_IGN ((__sighandler_t) 1) /* Ignore signal. */
SIG_DFL
等旨在分配给sa_处理程序
成员,但是(同样,不要依赖于此)sa_handler
在Linux上与sa_sigaction
联合使用,因此将NULL
分配给sa_sigaction
相当于将SIG_DFL
分配给sa_handler
union
{
/* Used if SA_SIGINFO is not set. */
__sighandler_t sa_handler;
/* Used if SA_SIGINFO is set. */
void (*sa_sigaction) (int, siginfo_t *, void *);
}
__sigaction_handler;
# define sa_handler __sigaction_handler.sa_handler
# define sa_sigaction __sigaction_handler.sa_sigaction
NULL
可能被视为等同于SIG_-DFL
?同样,来自文档的sa_处理程序应分配这些值,而不是sa_-sigaction
。它恰好在当前glibc下工作,因为sa_handler
和sa_sigaction
在同一个联合体中实现。按照OP代码片段中显示的方式进行操作比不可重复执行/可移植的方式更方便。