sigaction代替signal举个例子
时间: 2023-10-06 20:07:08 浏览: 93
signal函数是一个比较老旧的信号处理方式,它的使用方式比较简单,但是存在一些安全问题,可能会导致程序崩溃或者出现未定义的行为。为了解决这些问题,现代操作系统一般推荐使用sigaction函数来替代signal函数。
下面是一个使用sigaction函数处理SIGINT信号的例子:
```c
#include <stdio.h>
#include <signal.h>
#include <unistd.h>
void handler(int sig) {
printf("Received SIGINT signal.\n");
}
int main() {
struct sigaction sa;
sa.sa_handler = handler;
sigemptyset(&sa.sa_mask);
sa.sa_flags = 0;
sigaction(SIGINT, &sa, NULL);
while (1) {
printf("Sleeping...\n");
sleep(1);
}
return 0;
}
```
在这个例子中,我们首先定义了一个信号处理函数handler,它的功能是在接收到SIGINT信号时输出一条信息。然后我们使用sigaction函数来注册这个信号处理函数,将sa_handler字段设置为handler,将sa_mask字段清空,将sa_flags字段设置为0。最后我们进入一个死循环,每隔1秒钟输出一条信息,直到程序被强制终止。
值得注意的是,与signal函数不同,sigaction函数对信号的处理方式更加灵活,可以设置信号的处理函数、信号掩码、处理标志等多个参数,能够更加精细地控制信号的处理过程。
阅读全文