#define _SIGSET_NWORDS (1024 / (8 * sizeof(unsigned long int)))
typedef struct {
unsigned long int __val[_SIGSET_NWORDS];
} sigset_t;
1
#include <signal.h>
int sigemptyset(sigset_t *set);
set: 指向需要初始化的信号集变量的指针。
成功时返回 0。 失败时返回 -1,并设置 errno。
#include <signal.h>
int sigfillset(sigset_t *set);
set: 指向需要初始化的信号集变量的指针。
成功时返回 0。 失败时返回 -1,并设置 errno。
#include <signal.h>
int main() {
sigset_t sig_set;
if (sigfillset(&sig_set) == -1) {
perror("sigfillset");
return 1;
}
// 现在 sig_set 包含所有信号
return 0;
}
2
#include <signal.h>
int sigaddset(sigset_t *set, int signum);
set: 指向信号集的指针。 signum: 要添加的信号。
成功时返回 0。 失败时返回 -1,并设置 errno。
#include <signal.h>
int main() {
sigset_t sig_set;
if (sigemptyset(&sig_set) == -1) {
perror("sigemptyset");
return 1;
}
if (sigaddset(&sig_set, SIGINT) == -1) {
perror("sigaddset");
return 1;
}
// 现在 sig_set 包含 SIGINT 信号
return 0;
}
#include <signal.h>
int sigdelset(sigset_t *set, int signum);
set: 指向信号集的指针。 signum: 要删除的信号。
成功时返回 0。 失败时返回 -1,并设置 errno。
#include <signal.h>
int main() {
sigset_t sig_set;
if (sigfillset(&sig_set) == -1) {
perror("sigfillset");
return 1;
}
if (sigdelset(&sig_set, SIGINT) == -1) {
perror("sigdelset");
return 1;
}
// 现在 sig_set 不包含 SIGINT 信号
return 0;
}
3
#include <signal.h>
int sigismember(const sigset_t *set, int signum);
set: 指向信号集的指针。 signum: 要测试的信号。
如果信号 signum 在信号集 set 中,则返回 1。 如果信号 signum 不在信号集 set 中,则返回 0。 失败时返回 -1,并设置 errno。
#include <signal.h>
#include <stdio.h>
int main() {
sigset_t sig_set;
if (sigemptyset(&sig_set) == -1) {
perror("sigemptyset");
return 1;
}
if (sigaddset(&sig_set, SIGINT) == -1) {
perror("sigaddset");
return 1;
}
if (sigismember(&sig_set, SIGINT)) {
puts("信号集中包含 SIGINT 信号");
} else {
puts("信号集中不包含 SIGINT 信号");
}
return 0;
}