信号处理函数(3)-sigaction() 为信号注册信号捕捉函数
定义:
int sigaction(int signum,const struct sigaction *act ,struct sigaction *oldact);
表头文件:
#include<signal.h>
说明:
sigaction()会依参数signum指定的信号编号来设置该信号的处理函数。参数signum可以指定SIGKILL和SIGSTOP以外的所有信号。
如参数结构sigaction定义如下
struct sigaction
{
void (*sa_handler) (int);
sigset_t sa_mask;
int sa_flags;
void (*sa_restorer) (void);
}
sa_handler: 函数指针,指定当信号到来时由哪个函数来处理,函数原型为 void foo(int);
sa_mask: 临时屏蔽字,在处理信号时,屏蔽哪些信号。
sa_flags 用来设置信号处理的其他相关操作, 可设置为0
返回值:
执行成功则返回0, 如果有错误则返回-1。
示例:
#include <stdio.h>
#include <unistd.h>
#include <signal.h> void recv_sig(int num)
{
int n = ;
printf("I have received a signal\n");
while(n--) {
printf("num = %d\n", num);
sleep();
}
} int main()
{
struct sigaction act;
act.sa_handler = recv_sig;
sigemptyset(&act.sa_mask);
// 当处理SIGUSR1信号时,暂时屏蔽SIGQUIT信号
sigaddset(&act.sa_mask, SIGQUIT);
act.sa_flags = ; sigaction(SIGUSR1, &act, NULL); while() {
printf("*************\n");
sleep();
}
return ;
}
运行结果:
yongdaimi@iMac:~/Documents/code$ ./app
*************
*************
*************
*************
*************
*************
*************
*************
*************
*************
*************
*************
*************
*************
*************
I have received a signal
num = 10
num = 10
num = 10
^\num = 10
num = 10
退出 (核心已转储)
最新文章
- UI控件(UITextField)
- C#语言——类
- 客户端访问AIDLService(远程绑定Service)
- 面试题之spring
- NBearV3中文教程总目录
- Hive学习之二 《Hive的安装之自定义mysql数据库》
- 查看SQLServer 代理作业的历史信息
- 批量替换数据库中所有用户数据表中字段数据类型为char和varchar到nvarchar的脚本
- jquery 操作服务端控件,select 控件
- shell之数组和关联数组
- 不使用Visual Studio开发ASP.NET MVC应用(下篇)
- Linux笔记-top命令和load average
- [ 高危 ] my存在sql注入
- 抓取epsg.io的内容
- 洛谷 P2054 [AHOI2005]洗牌
- webpack(3)--Output
- Matlab 调用Oracle数据库
- POJ 3304 Segments 基础线段交判断
- 使用范围for语句处理多维数组
- JDBC(1)简单介绍/数据库的连接
热门文章
- 优化png图片的历程
- Unity的shader学习1
- [Ubuntu]明明白白安装中文字体
- vmwareubuntu18.04网络配置
- Ubuntu 中/etc/resolv.conf 文件修改丢失的解决方案
- 如何判断linux用户是否为root用户
- Linux 安装tomcat 及过程中遇到的问题
- UNIX网络编程读书笔记:shutdown函数
- UNIX网络编程读书笔记:地址操纵函数
- FileUpload类中FileUpload1.FileName和FileUpload1.PostedFile.FileName的区别