Linux学习之系统编程篇:与信号捕捉有关的函数(signal / sigaction)

本文介绍了UNIX系统中的信号处理函数signal和sigaction。signal函数用于注册信号处理函数,但其行为在不同UNIX版本中可能不一致。推荐使用更稳定的sigaction函数,该函数允许更精细地控制信号处理,包括设置信号处理过程中的临时屏蔽信号集和标志。通过sigaction,可以更好地控制信号的捕捉和处理流程。
摘要由CSDN通过智能技术生成

一、signal 函数

(1)原型:

typedef void (*sighandler_t)(int);
sighandler_t signal(int signum, sighandler_t handler);

(2)参数:
参数 1:捕捉指定的信号
参数 2:函数指针(因此需要写回调函数)
(3)回调函数:(作用:信号被捕捉后,要执行什么操作)
原型:void func(int num);
注意:只有当信号产生并捕捉后才调用
signal 函数虽然简单,但在 UNIX 不同版本中的行为可能不一样,所以,建议使用 sigaction 函数。

二、sigaction 函数

(1)函数原型:

int sigaction(int signum, const struct sigaction *act,struct sigaction *oldact);

(2)参数:
参数 1:需要捕捉的信号
参数 2:怎么去捕捉(在结构体中作设置);
参数 3:上次捕捉的相关信息,一般传 NULL
参数 2 结构体详情如下:

struct sigaction //函数调用时候传入地址
{
 void (*sa_handler)(int); // 跟 signal 函数指针用法相同
 sigset_t sa_mask; // 在信号处理过程中(从捕捉到回调函数执行完毕)临时屏蔽的信号集,在信号处理结束后,屏蔽信号继续执行,如果没有特别需求,先定义,再进行清空操作。
 int sa_flags; // 固定写 0 这样可以与第一个参数(函数指针)相配套
 };

(3)捕捉的一般流程:

struct sigaction act; // 设置参数 2 :结构体
act. sa_flags =0;
act. sa_handler = func; // 设置回调函数指针
sigemptyset(&act. sa_mask); // 置空临时屏蔽信号
// sigaddset(&act.sa_mask, signum1); // 临时屏蔽 signum1, 不需要屏蔽的话忽略此句
sigaction(signum2, &act, NULL); // 捕捉 signum2
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值