C sa_掩码默认值是否为空?

C sa_掩码默认值是否为空?,c,linux,signal-handling,sigaction,C,Linux,Signal Handling,Sigaction,我正在尝试实现一个信号处理程序,想知道是否需要显式清空struct sigaction的sau mask字段,或者使用默认值初始化它是否足够。实际上,您可以使用类似memset()的东西将结构初始化为0,然后初始化信号处理程序字段: struct-sigaction动作; memset(&action,0,sizeof(struct-sigaction)); action.sa_handler=handler_func; 理论上,像“sigset_t”这样的类型化对象有其适当的初始化方法。因此

我正在尝试实现一个信号处理程序,想知道是否需要显式清空struct sigaction的sau mask字段,或者使用默认值初始化它是否足够。

实际上,您可以使用类似memset()的东西将结构初始化为0,然后初始化信号处理程序字段:

struct-sigaction动作;
memset(&action,0,sizeof(struct-sigaction));
action.sa_handler=handler_func;
理论上,像“sigset_t”这样的类型化对象有其适当的初始化方法。因此,您不能假设通过memset()将其设置为0会起作用。因此,对于该字段,您应该使用相关例程来操作它:

struct-sigaction动作;
memset(&action,0,sizeof(struct-sigaction));
sigemptyset(&(action.sa_mask));
action.sa_handler=handler_func;

实际上,您可以使用类似memset()的东西将结构初始化为0,然后初始化信号处理程序字段:

struct-sigaction动作;
memset(&action,0,sizeof(struct-sigaction));
action.sa_handler=handler_func;
理论上,像“sigset_t”这样的类型化对象有其适当的初始化方法。因此,您不能假设通过memset()将其设置为0会起作用。因此,对于该字段,您应该使用相关例程来操作它:

struct-sigaction动作;
memset(&action,0,sizeof(struct-sigaction));
sigemptyset(&(action.sa_mask));
action.sa_handler=handler_func;

您是否正在从posix中引用
sa_mask
字段?您需要为您的问题添加一点上下文。是的,我正在尝试初始化struct sigaction并设置sa_标志和sa_sigaction,但我不知道是否需要清空sa_Masky。您需要确保它设置为已知状态-所有位零都可以。如果在堆栈上分配了结构,则必须显式地将其归零。如果由
malloc()
分配,则同上,但如果由
calloc()
分配,则同上。如果在文件范围(静态或全局)分配结构,则默认情况下,它将初始化为所有字节零。所有这些都假设您不提供初始值设定项。这会将未显式初始化的位设置为零。您是否参考posix中的
sa_mask
字段?您需要为您的问题添加一点上下文。是的,我正在尝试初始化struct sigaction并设置sa_标志和sa_sigaction,但我不知道是否需要清空sa_Masky。您需要确保它设置为已知状态-所有位零都可以。如果在堆栈上分配了结构,则必须显式地将其归零。如果由
malloc()
分配,则同上,但如果由
calloc()
分配,则同上。如果在文件范围(静态或全局)分配结构,则默认情况下,它将初始化为所有字节零。所有这些都假设您不提供初始值设定项。这将把没有显式初始化的位也设置为零。