Unix系统编程()信号处理器简介

本文介绍信号处理器程序的基本原理及应用实例。信号处理器程序用于响应特定信号,并可在任意时刻中断主程序流程。文章通过一个简单的信号处理器函数示例,展示了如何为SIGINT信号设置处理器,并在接收到信号时执行特定操作。

信号处理器简介

信号处理器程序(也称为信号捕捉器)是当指定信号传递给进程时将会调用的一个函数。这里会学习信号处理器的基本原理,后面将继续学习。

调用信号处理器程序,可能会随时打断主程序流程;内核代表进程来调用处理器程序,当处理器返回时,主程序会在处理器打断的位置恢复执行。

 

image

 

虽然信号处理器程序几乎可以为所欲为,但一般而言,设计应力求简单。

程序20-1

#include <signal.h>

static void sigHandler(int sig) {
    printf("Ouch!\n");              /* Unsafe */
}

int main(int argc, char *argv[]) {
    int j;

    if( signal(SIGINT, sigHandler) == SIG_ERR)
        printf("error\n");

    for(j = 0; ; j++) {
        printf("%d\n", j);
        sleep(3);
    }
}

 

程序清单20-1所示为一个简单的信号处理器函数,由主程序为SIGINT信号而建立.当键入中断字符(通常为Control-C)时,终端驱动程序将产生该信号。处理器只是简单打印一条消息,随机返回。

 

主程序会持续循环。每次迭代,程序都将递增计数器的值并将其打印出来,然后休眠几秒钟。


内核在调用信号处理器程序时,会将引发调用的信号编号作为一个整型参数传递给处理器函数。如果信号处理器程序只捕获一种类型的信号,那么这个参数几乎无用。然而,如果安装相同的处理器来捕获不同类型的信号,那么就可以利用此参数来判定引发对外处理器调用的是何种信号。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值