#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <signal.h>
/*
* 是标准C库中用于操作自定义信号集的一个函数
*/
#if 0
# 初始化一个自定义信号集,将其所有信号都清空,也就是将信号集中的所有的标志位置为0,
# 使得这个集合不包含任何信号,也就是不阻塞任何信号。
int sigemptyset(sigset_t *set);
set:指向sigset_t类型的指针,sigset_t是一个信号集类型,用于表示一个信号集。
把用这个指针指向的信号集清空,也就是不阻塞任何信号。
成功时,返回0;
失败时,返回-1,并设置errno表示错误原因。
#endif
void signal_handler(int signal_number)
{
printf("Received signal %d\n", signal_number);
exit(signal_number);
}
int main()
{
struct sigaction sa;
sigset_t signal_set;
// 初始化信号集
if (sigemptyset(&signal_set) == -1) {
perror("sigemptyset");
return 1;
}
// 设置信号处理程序
sa.sa_handler = signal_handler;
sa.sa_mask = signal_set;
sa.sa_flags = 0;
// 注册信号处理程序
if (sigaction(SIGINT, &sa, NULL) == -1) {
perror("sigaction");
return 1;
}
// 进入无限循环,等待信号
while (1) {
pause();
}
return 0;
}