Unix系统提供了两种方法来改变信号处置:signal和sigaction。这篇描述的是signal系统调用,是设置信号处理的原始API,所提供的接口比sigaction简单。另一方面,sigaction提供了signal所不具备的功能。进一步而言,signal的行为在不同UNIX实现间存在差异,这也意味着对可移植性有所追求的程序绝不能使用此调用来建立信号处理器函数。故此,sigaction是建立信号处理器的首选API。

#include <signal.h>
void (*signal(int sig, void (*handler)(int))) (int);

这里要对signal的原型做一些解释。第一个参数sig,标识希望修改处置的信号编号,第二个参数handler,则标识信号抵达时所调用函数的地址。该函数无返回值,并接收一个整型参数。因此,信号处理器一般具有一下形式:

void handler(int sig) {
/* Code for the handler */
}

signal返回值是之前的信号处置。像handler参数一样,这是一枚指针,所指向的是带有一个整型参数且无返回值的函数。换言之,编写如下代码,可以暂时为信号建立一个处理器函数,然后再将信号处置重置为其本来面目:

void (*oldHandler) (int);
oldHandler = signal(SIGINT, newHandler); if(oldHandler == SIG_ERR)
errExit("signal"); /* Do something else here. During this time, if SIGINT
is delivered, newHandler will be used to handle the signal. */ if(signal(SIGINT, oldHandler) == SIG_ERR)
errExit("signal");

使用signal,将无法在不改变信号处置的同时,还能获取到当前的信号处置。要想做到这一点,必须使用sigaction。

Unix系统编程()改变信号处置:signal的更多相关文章

  1. 《Linux/UNIX系统编程手册》第63章 IO多路复用、信号驱动IO以及epoll

    关键词:fasync_helper.kill_async.sigsuspend.sigaction.fcntl.F_SETOWN_EX.F_SETSIG.select().poll().poll_wa ...

  2. 《Linux/Unix系统编程手册》 时间子系统

    Linux下操作系统编程有两本经典APUE即<Advanced Programming in the UNIX Environment>和TLPI<The Linux Program ...

  3. 《Linux/Unix系统编程手册》读书笔记7 (/proc文件的简介和运用)

    <Linux/Unix系统编程手册>读书笔记 目录 第11章 这章主要讲了关于Linux和UNIX的系统资源的限制. 关于限制都存在一个最小值,这些最小值为<limits.h> ...

  4. 《Linux/Unix系统编程手册》读书笔记5

    <Linux/Unix系统编程手册>读书笔记 目录 第8章 本章讲了用户和组,还有记录用户的密码文件/etc/passwd,shadow密码文件/etc/shadow还有组文件/etc/g ...

  5. 《Linux/Unix系统编程手册》读书笔记4

    <Linux/Unix系统编程手册>读书笔记 目录 第7章: 内存分配 通过增加堆的大小分配内存,通过提升program break位置的高度来分配内存. 基本学过C语言的都用过mallo ...

  6. 《Linux/Unix系统编程手册》读书笔记3

    <Linux/Unix系统编程手册>读书笔记 目录 第6章 这章讲进程.虚拟内存和环境变量等. 进程是一个可执行程序的实例.一个程序可以创建很多进程. 进程是由内核定义的抽象实体,内核为此 ...

  7. 《Linux/Unix系统编程手册》读书笔记1

    <Linux/Unix系统编程手册>读书笔记 目录 最近这一个月在看<Linux/Unix系统编程手册>,在学习关于Linux的系统编程.之前学习Linux的时候就打算写关于L ...

  8. 《Linux/Unix系统编程手册》读书笔记2

    <Linux/Unix系统编程手册>读书笔记 目录 第5章: 主要介绍了文件I/O更深入的一些内容. 原子操作,将一个系统调用所要完成的所有动作作为一个不可中断的操作,一次性执行:这样可以 ...

  9. 学习《Unix/Linux编程实践教程》(1):Unix 系统编程概述

    0.目录 1.概念 2.系统资源 3.学习方法 4.从用户的角度来理解 Unix 4.1 登录--运行程序--注销 4.2 目录操作 4.3 文件操作 5.从系统的角度来理解 Unix 5.1 网络桥 ...

随机推荐

  1. uva 10518 - How Many Calls?(矩阵快速幂)

    题目链接:uva 10518 - How Many Calls? 公式f(n) = 2 * F(n) - 1, F(n)用矩阵快速幂求. #include <stdio.h> #inclu ...

  2. [Angular-Scaled web] 3. Basic State with ui-router

    1. Install ui-route, include js file in html and add dependence in js file. bower install angular-ui ...

  3. MYSQL获取自增主键【4种方法】(转)

    转自:http://blog.csdn.net/ultrani/article/details/9351573 作者已经写的非常好了,我不废话了,直接转载收藏: 通常我们在应用中对mysql执行了in ...

  4. JAVA学习目录

    开发环境以及IDE准备相关: 1.JAVA环境搭建 2.初次使用IntelliJ IDEA 3.IntelliJ IDEA界面设置 4.IntelliJ IDEA快捷键介绍 SprintBoot系列: ...

  5. MQTT---HiveMQ源代码具体解释(十八)Cluster-kryo与Serializer

    源博客地址:http://blog.csdn.net/pipinet123 MQTT交流群:221405150 既然是Cluster,node之间肯定是须要交互的,那么肯定是须要序列化和反序列化.Hi ...

  6. Python 倒叙切片

    倒序切片 对于list,既然Python支持L[-1]取倒数第一个元素,那么它同样支持倒数切片,试试: >>> L = ['Adam', 'Lisa', 'Bart', 'Paul' ...

  7. PHP文件系统处理

    文件系统概述 文件类型         PHP是以UNIX的文件系统为模型的,因此Windows系统中我们只能获得"file"."dir"或者"unk ...

  8. ORA-16014 与 ORA-00312

    场景: SQL> alter system archive log current; alter system archive log current * 第 1 行出现错误: ORA-1601 ...

  9. UVA 10620 - A Flea on a Chessboard(鸽笼原理)

    UVA 10620 - A Flea on a Chessboard 题目链接 题意:给定一个跳蚤位置和移动方向.如今在一个国际象棋棋盘上,左下角为黑格,一个格子为s*s,推断是否能移动到白格子.问要 ...

  10. Servlet 过滤器 Filter

    过滤器是一个实现了 javax.servlet.Filter 接口的 Java 类.javax.servlet.Filter 接口定义了三个方法: 下面是对所有编码过滤器 package filter ...