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. git 使用详解-- tag打标签

    Git 的标签管理.跟大多数的 VCS 工具一样,git 也有在历史状态的关键点“贴标签”的功能,一般人们用这个功能来标记发布点(例如’v1.0′). 列出git中现有标签 要想列出git中现有的所有 ...

  2. 【转】TCP分段与IP分片

    原文: :https://www.jianshu.com/p/f9a5b07d99a2 -------------------------------------------------------- ...

  3. Windows 批处理 ping 某个网段

    原文: https://blog.csdn.net/leuxcn/article/details/51288248 ------------------------------------------ ...

  4. SSH ProxyCommand 实践

    ​ 在阿里上搭了典型的 Nginx + APP server 的架构: 即,只有 Nginx 服务器与公网链接.然后,每次部署升级服务器都要先 SSH 到 Nginx 再 SSH 到 server1 ...

  5. 对SVM的个人理解---浅显易懂

    原文:http://blog.csdn.net/arthur503/article/details/19966891 之前以为SVM很强大很神秘,自己了解了之后发现原理并不难,不过,“大师的功力在于将 ...

  6. JS中括号的用法

    转自:http://blog.csdn.net/hongmin118/article/details/4584023 我们在一些JS代码中经常可以看到这样的用法 :(function(){})();那 ...

  7. (剑指Offer)面试题13:在O(1)时间内删除链表结点

    题目: 在给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间内删除该结点.链表结点与函数的定义如下: struct ListNode{ int val; ListNode* next; } ...

  8. HTML5 <input> required

    要求在提交数据之前必须填写该字段,否则会提交不了   <form>          <input type="text" id="msg" ...

  9. mysql 流程函数 存储引擎 InnoDB简单特性

    建表及插入数据语句: mysql> create table salary(userid int,salary decimal(9,2)); Query OK, 0 rows affected ...

  10. SQL Server Management Studio 简单使用说明

    1.对数据库中的数据生成脚本 a.选中要生成脚本的数据库右键->任务->生成脚本(如下图)->下一步->下一步->选中你想要生成的内容->下一步->完成