C语言信号学习笔记
在C语言中,对于错误有很多处理方式。然而,今天学习了信号处理,感觉这种处理方式十分灵活,特此记录。
关于信号处理的函数包含于头文件<signal.h>中。所谓的信号,多指出乎程序员意料的行为,包括程序本身的行为(即错误)和用户的行为。当有错误或者外部事件发生时,我们称产生了一个信号。
signal.h中定义了若干宏与相应的信号对应,比较常用的有:
| 宏名 | 含义 |
| SIGABRT | 异常终止 |
| SIGFPE | 在算术运算中发生错误 |
| SIGILL | 无效指令 |
| SIGINT | 中断 |
| SIGSEGV | 无效存储访问 |
| SIGTERM | 终止请求 |
其中,signal函数用于处理信号,将相应的信号和自己编写的函数关联,达到执行相应指令的目的。有点类似于事件侦听器。原型如下:
void (*signal(ing sig, void (*func)(int)))(int);
用法如下:
signal (SIGINT, handler);
另外,raise函数可以手工地产生一个信号,用法如下:
raise(SIGABRT); // raises the SIGABRT signal.
示例程序:
/* tsignal.c
* To test signals.
* By Eric Brown
*/ #include <signal.h>
#include <stdio.h>
#include <stdlib.h> void handler(int sig); int main(void)
{
signal(SIGFPE, handler); int x, y, result;
printf("Please input two integer: "); scanf("%d%d", &x, &y);
result = x / y; //signal(SIGABRT, handler);
raise(SIGABRT); printf("Program run here!\n");
return 0;
} void handler(int sig)
{
if (sig == SIGFPE)
{
printf("We get a SIGFPE signal.\n");
exit (EXIT_FAILURE);
}
if (sig == SIGABRT)
{
printf("We get a SIGABRT signal.\n");
}
}
运行效果如下:
C语言信号学习笔记的更多相关文章
- # C语言假期学习笔记——6
C语言假期学习笔记--6 数组 主要学习了一位数组和二维数组. 数组是一组具有相同类型的变量的集合.C语言程序通过元素的下标来访问数组中的元素.(下标从0开始) 一位数组 类型 数组名[元素个数] 二 ...
- R语言可视化学习笔记之添加p-value和显著性标记
R语言可视化学习笔记之添加p-value和显著性标记 http://www.jianshu.com/p/b7274afff14f?from=timeline 上篇文章中提了一下如何通过ggpubr ...
- swift语言的学习笔记
swift参考了OC,Rust,Haskell,Ruby,Python,C#等语言的特性.首先,学习这门语言是速学的,我不想浪费太多时间在笔记这门语言和其他语言的哪里不同,特性你自己亲自实践就知道了. ...
- Linux C语言编程学习笔记 (1)进程控制入门
想进行Linux系统开发已经很久了,一直没有付诸实践.今日终于开始学习Linux下的C语言编程,研究一天,终于大概弄明白了Linux系统进程管理的一些基本概念和编程方法,总结下来以方便大家学习和自己实 ...
- 《手把手教你学C语言》学习笔记(2)---学习C语言的目标和方法
一.学习C语言的目标主要是: 熟练掌握C语言的关键字,语法规则,程序控制等: 掌握基本的数据结构,数组.链表.栈和队列等: 掌握C语言中指针和内存.数组与指针.函数与指针.变量和指针.结构体和指针.硬 ...
- 从零开始系列-R语言基础学习笔记之二 数据结构(二)
在上一篇中我们一起学习了R语言的数据结构第一部分:向量.数组和矩阵,这次我们开始学习R语言的数据结构第二部分:数据框.因子和列表. 一.数据框 类似于二维数组,但不同的列可以有不同的数据类型(每一列内 ...
- go语言程序设计学习笔记-1
https://www.jb51.net/article/126998.htm go标准库文档https://studygolang.com/pkgdoc 1. 如果想要再本地直接查看go官方文档,可 ...
- R语言的学习笔记 (持续更新.....)
1. DATE 处理 1.1 日期格式一个是as.Date(XXX) 和strptime(XXX),前者为Date格式,后者为POSIXlt格式 1.2 用法:as.Date(XXX,"%Y ...
- 《手把手教你学C语言》学习笔记(4)---代码规范
编程过程中需要遵守编译器的各种约定,例如以下代码: 1 #include <stdio.h> 2 3 int main(int argc, char **argv) 4 { 5 print ...
随机推荐
- QTableWidget 导出到csv表格
跳槽到了新的公司,开始苦逼的出差现场开发,接触到了新的应用.有很多应用需要将Table导出成表格,可以把table导出成csv格式的文件.跟大伙分享一下: lass TableToExcle : pu ...
- cocos2d-x游戏开发系列教程-中国象棋04-摆棋
前情回顾 在之前的学习中,我们已经了解到,下棋主界面是由CCMainMenu类实现的,在它的init函数中,初始化了 主界面需要的各种数据,包括:创建控件,初始化32个棋子,初始化执行变量等等,在这个 ...
- boost 分析命令行参数
#include <boost/program_options.hpp> #include <iostream> #include <vector> using n ...
- Android事件模型之interceptTouchEvnet ,onTouchEvent关系正解
首先,看Android的官方文档正解 onInterceptTouchEvent()与onTouchEvent()的机制: 1. down事件首先会传递到onInterceptTouchEvent() ...
- Azure 云 Web 应用程序
Azure 云 Web 应用程序 原文:Getting Started作者:Rick Anderson翻译:谢炀(Kiler)校对:孟帅洋(书缘).刘怡(AlexLEWIS).何镇汐 设置开发环境 安 ...
- 半透明panel
用API SetLayeredWindowAttributes
- 九度OnlineJudge之1017:还是畅通工程
题目描述: 某省调查乡村交通状况,得到的统计表中列出了任意两村庄间的距离.省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可 ...
- properties 文件的中文转ASCII
在软件开发过程中,经常要涉及到多语言支持问题,常用的解决方案是将各个语言文字放到properties文件中,但中文是需要转为ASCII的 .那么如何将中文进行转换呢,下面就为你列举几种比较方便的方法 ...
- poj3617Best Cow Line
题意大概是这样,给你一个字符串,你能够进行的操作是这种, 每次拿走这个串的第一个字母,或者最后一个字母,然后放到 一个新串的末尾(当然啦,新串一開始是为空的),当把旧串 里的全部字母拿掉,这个时候就形 ...
- 图解C#_事件
概述 今天用来演示事件的例子是模拟实现一个文件下载类,在这个类中我将定义一个DownLoad事件,这个事件用来在文件下载的过程中,向订阅这个事件的用户发出消息,而这个消息将用DownLoadEvent ...