Ser*_*gio 6 c unix linux posix signals
众所周知,如果需要重置一个sigset_t变量就足够了
    sigemptyset(&my_ss);
我想知道是否有一种标准的方法来初始化这样的变量以使其为空(即好像用户刚刚使用上面显示的方法重置了它)。也许某种类似于 pthread API 的宏。例如
static sigset_t trackedSignals = SIGSET_INITIALIZER;
在 Linux 系统上{0},将其用作这样的初始化程序显然就足够了,但它可以在任何地方使用吗?因为正如我所见,POSIX 很少定义这种类型:
sigset_t
[CX] 用于表示信号集的对象的整数或结构类型。
因此,严格来说,{0}不必将此对象初始化为语义上的“空”。
use*_*248 -3
根据GNU 文档,最可移植的方法是根本不初始化内联:sigset_t
\n\n为了可移植性,仅使用本节中描述的函数来初始化、更改
\nsigset_t对象\xe2\x80\x94和检索对象\xe2\x80\x94中的信息,不要尝试直接操作它们。
公认且最可移植的做法是使用 来评估类型sigemptyset()。例如,如果您有,static sigset_t trackedSignals;那么您应该调用sigemptyset(&trackedSignals);程序的入口点。
所以答案是,在声明它的同时,没有一种可移植的方法来“初始化”它。您必须使用该函数来设置超出范围的值。例如,它可能需要malloc()在幕后调用,排除任何“常量”初始值设定项表达式。