2016-06-01 93 views

回答

2

The manual page了答案:[...]

所以,你会做这样的事情

它是由位或零个或多个以下形成

sa1.sa_flags = SA_NODEFER | SA_SIGINFO; 

这种将多个独立标志位表示为一个整数中的单个位的方式在所有编程中都非常普遍,当然在C中也很常见。它很容易因为按位操作在C中很简单,并且通常是可取的,因为它是一个非常轻的实现。

更“现代”(详细,和/或Bloaty McBloatface)的方法可能是使用位域在结构中:

struct sigaction { 
    /* ... */ 
    struct { 
    unsigned int sa_nocldstop : 1; 
    unsigned int sa_nocldwait : 1; 
    unsigned int sa_nodefer : 1; 
    unsigned int sa_nostack : 1; 
    unsigned int sa_siginfo : 1; 
    /* ... */ 
    } sa_flags; 
    /* ... */ 
}; 

这使得sa_flags构件在struct sigaction本身是一个struct,它由一堆1位宽的unsigned int成员。这通常会编译成完全相同的按位代码,但更清楚。

sa1.sa_flags.sa_nodefer = 1; 
sa1.sa_flags.sa_siginfo = 1; 

和你需要一些其他的方式,以确保得到休息设置为0

你会做明确的套设置多个标志