sigaction用法
时间: 2023-08-21 15:53:14 浏览: 48
sigaction函数是用于设置和处理信号处理程序的函数。下面是sigaction函数的用法示例:
```c
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
void sig_handler(int signum) {
printf("Received signal: %d\n", signum);
// 执行信号处理程序的逻辑
// ...
}
int main() {
struct sigaction sa;
// 设置信号处理程序
sa.sa_handler = sig_handler;
sigemptyset(&sa.sa_mask);
sa.sa_flags = 0;
// 注册信号处理程序
if (sigaction(SIGINT, &sa, NULL) == -1) {
perror("sigaction");
exit(1);
}
// 主循环
while (1) {
// 执行主逻辑
// ...
}
return 0;
}
```
上述示例代码中,我们定义了一个名为`sig_handler`的信号处理程序,它在接收到信号后会打印信号值。在`main`函数中,我们首先创建了一个`struct sigaction`结构体对象`sa`,并设置了其中的成员变量。然后,通过调用`sigaction`函数来注册信号处理程序。在示例中,我们将`SIGINT`信号(即Ctrl+C)与`sig_handler`关联起来。如果注册过程出错,会打印错误信息并退出。
接下来,在主循环中可以执行其他的逻辑操作。当接收到`SIGINT`信号时,会调用`sig_handler`进行处理。
需要注意的是,`sigaction`函数可以设置更多的选项,如使用`sa_sigaction`代替`sa_handler`来指定带有额外信息的信号处理程序,以及使用`sa_flags`标志来设置其他行为。详细的用法和参数配置可以参考相关的文档或手册。