信号捕捉(三)

信号捕捉 :如果信号的处理动作是用户自定义函数 ,在信号递达时就调用这个函数的种种行为
/*************************************************************************************************************/
一、sigaction 函数(功能与 signal()函数功能一样,都是捕捉信号)
    sigaction函数可以读取和修改与指定信号相关联的处理动作。调用成功则返回 0,出错则返回- 1
#include <signal.h>
int sigaction(int signo, const struct sigaction *act, struct,sigaction *oact);

参数意义:
signo是指定信号的编号
act指针非空,则根据act修改该信号的处理动作。
oact指针非 空 ,则通过 oact传出该信号原来的处理动作。
actoact指向sigaction构体:

        (1)sa_handler参数:
1、sa_handler赋值为常数 SIG_IGN传给sigaction 表示忽略信号 ,
          2、赋值为常数SIG_DFL表示执行系统默认动作 ,
          3、赋值一个函数指针表示用自定义函数捕捉信号(信号处理函数是一个回调函数 ,不是被 main函数调用 ,而是被系 统所调用)
   (2)sa_mask字段说明这些需要额外屏蔽的信号 ,当信号处理函数返回时自动恢复原来的信号屏蔽字。
   (3)sa_flags字段包含一些选项,本章的代码都把 sa_flags设为 0
   (4)sa_sigaction是实时信号的处理函 数
    应用举例:当在程序运行的过程中,按Ctrl+C,将不再是结束进程,而是执行自定义的handler函数)
     
     
/*************************************************************************************************************/
二、pause函数
#include <unistd.h>
int pause(void);
pause函数使调用进程挂起直到有信号递达。
如果信号的处理动作是终止进程,则进程终,pause 函数没有机会返回 ;
如果信号的处理动作是忽略,则进程继续处于挂起状态,pause不返回 、
如果信号的处理动作是捕捉,则调用了信号处理函数之后pause返回-1,errno设置为EINTREINTR表 示信号中断
所以pause只有出错的返回值(想想以前还学过什么函数只有出错返回值?)
/*************************************************************************************************************/
三、利用 pause 函数与 alarm 函数实现与sleep()函数功能相同的函数 mysleep
         (1)把宏 SIGALRM 的处理动作设置为自定义的 handler 函数后,再调用 alarm 函数,等过了seconds 
                    秒后,就不再是终止进程;
         (2)由于是对于自定义函数,所以 pause 返回-1,继续向下执行,取消闹钟,恢复SIGALRM信号的
                    默认处理动作。
                   
         
/*************************************************************************************************************/

/*************************************************************************************************************/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值