免费C语言教程:阿里云大学——开发者课堂(点击文章最下方“了解更多”)

信号是由操作系统传给进程的中断,会提早终止一个程序。在 UNIX、LINUX、Mac OS X 或 Windows 系统上,可以通过按 Ctrl+C 产生中断。

有些信号不能被程序捕获,但是下表所列信号可以在程序中捕获,并可以基于信号采取适当的动作。这些信号是定义在 C++ 头文件 中。

signal() 函数

C++ 信号处理库提供了 signal 函数,用来捕获突发事件。以下是 signal() 函数的语法:

void (*signal (int sig, void (*func)(int)))(int);

这个函数接收两个参数:第一个参数是一个整数,代表了信号的编号;第二个参数是一个指向信号处理函数的指针。

让我们编写一个简单的 C++ 程序,使用 signal() 函数捕获 SIGINT 信号。不管您想在程序中捕获什么信号,您都必须使用 signal 函数来注册信号,并将其与信号处理程序相关联。看看下面的实例:

#include #include using namespace std;void signalHandler( int signum ){ cout << "Interrupt signal (" << signum << ") received.";  // 清理并关闭 // 终止程序   exit(signum); }int main (){ // 注册信号 SIGINT 和信号处理程序 signal(SIGINT, signalHandler);   while(1){ cout << "Going to sleep...." << endl; sleep(1); }  return 0;}

当上面的代码被编译和执行时,它会产生下列结果:

Going to sleep....Going to sleep....Going to sleep....

现在,按 Ctrl+C 来中断程序,您会看到程序捕获信号,程序打印如下内容并退出:

Going to sleep....Going to sleep....Going to sleep....Interrupt signal (2) received.

raise() 函数

您可以使用函数 raise() 生成信号,该函数带有一个整数信号编号作为参数,语法如下:

int raise (signal sig);

在这里,sig 是要发送的信号的编号,这些信号包括:SIGINT、SIGABRT、SIGFPE、SIGILL、SIGSEGV、SIGTERM、SIGHUP。以下是我们使用 raise() 函数内部生成信号的实例:

#include #include using namespace std;void signalHandler( int signum ){ cout << "Interrupt signal (" << signum << ") received.";  // 清理并关闭 // 终止程序   exit(signum); }int main (){ int i = 0; // 注册信号 SIGINT 和信号处理程序 signal(SIGINT, signalHandler);   while(++i){ cout << "Going to sleep...." << endl; if( i == 3 ){ raise( SIGINT); } sleep(1); }  return 0;}

当上面的代码被编译和执行时,它会产生下列结果,并会自动退出:

Going to sleep....Going to sleep....Going to sleep....Interrupt signal (2) received.

免费C语言教程:阿里云大学——开发者课堂(点击下方“了解更多”)

cserialport 循环发送信号_C++信号处理相关推荐

  1. cserialport 循环发送信号_10个动作三个循环,练完至少瘦一圈,吃多了也不用担心...

    今天是爱健身(微信号:love-fitness)推送的第594次健身打卡,练习内容有10个动作组成. 用这10个动作在家练起来,每次3个循环,练完至少瘦一圈,吃多了也不用担心.练习过程中,动作与动作之 ...

  2. linux 向程序发送信号,Linux下的信号处理

    Linux下的信号处理 发布时间:2006-01-02 09:34:14来源:红联作者:reing 前言:这一章我们讨论一下Linux下的信号处理函数. Linux下的信号处理函数: 信号的产生 信号 ...

  3. 【信号】信号处理与进程通信:快速上手

    目录 0. 信号概述 1. 产生信号的方式: 1.1 当用户按某些终端键时,将产生信号. 1.2 硬件异常将产生信号. 1.3 软件异常将产生信号. 1.4 调用kill函数将发送信号. 1.5 运行 ...

  4. 【genius_platform软件平台开发】第六十八讲:linux系统驱动开发之-驱动程序发送信号给应用程序

    大家好,我是峰哥,今天给大家解说一下:驱动层发送信号给应用程序.在上一篇文章中,我讲过:应用层发送指令来控制驱动层的GPIO状态,[genius_platform软件平台开发]第六十七讲:linux系 ...

  5. linux系统发送信号的系统调用是,linux系统编程之信号:信号发送函数sigqueue和信号安装函数sigaction...

    信号发送函数sigqueue和信号安装函数sigaction sigaction函数用于改变进程接收到特定信号后的行为. sigqueue()是比较新的发送信号系统调用,主要是针对实时信号提出的(当然 ...

  6. 向流程组的所有成员发送信号的最佳方法是什么?

    我想杀死整个进程树. 使用任何常用脚本语言执行此操作的最佳方法是什么? 我正在寻找一个简单的解决方案. #1楼 志刚答案的修改版: #!/usr/bin/env bash set -eukilltre ...

  7. Linux C编程--进程间通信(IPC)3--信号集和发送信号介绍

    Linux信号集 1.信号集概念 信号集是一个能表示多个信号的数据类型,sigset_t set :set即一个信号集. 既然是一个集合,就需要对集合进行添加/删除等操作. int sigemptys ...

  8. Linux信号 二 信号处理函数注册

    每一个信号都有一个信号处理函数,可以是SIG_IGN, SIG_DFL或者是用户自定义的处理函数.使用用户自定义的处理函数需要注册,注册接口有如下两种. 第一种是signal调用 #include & ...

  9. linux+向进城发送信号,信号 - it610.com

    Linux中有两种类型信号 常规信号(regular signal):编码范围为1~31,同种类型的常规信号如果被发送多次,那么,只有其中的一个发送到接收进城 实时信号(real-time signa ...

最新文章

  1. sql和mysql语法_SQL 与MySQL-基本语法介绍
  2. [云炬创业学笔记]第二章决定成为创业者测试8
  3. 程序员你写的代码,被人挖出了黑产
  4. 【系统架构设计师】软考高级职称,一次通过,倾尽所有,2016年下半年系统架构设计师考试论文真题(论微服务架构及其应用)
  5. 用ikvm 来把java类库转换成_net类库,IKVM.NET
  6. 纯java生成验证码 java生成图片并保存
  7. Python使用线性回归简单预测数据
  8. 【k8s】记踩坑无数后的kubernetes二进制安装详细步骤
  9. echarts词云第一次出现不了数据要刷新才能出现_隐秘的角落弹幕分析,制作词云,看看观众们对该剧的评价如何...
  10. 京东商城逆势融资B2C成投资热土
  11. 中了勒索病毒,该如何恢复数据?
  12. 网页视频旋转(B站)
  13. 04 可视化开发工具
  14. 读书笔记-《领导力21法则》
  15. 电脑 蓝屏报错:SYSTMEM SCAN AT RAISED IRQL CAUGHT IMPROPER DRIVER UNLOAD
  16. 4、如果体彩中了500万,我买房、买车、资助希望工程、去欧洲旅游;如果没中,我买下一期体彩,继续烧高香。
  17. JavaScript交互式网页设计简介
  18. k30s刷鸿蒙系统,RedmiK30S或于10月27日发布:今年最后一款骁龙865手机
  19. 尝试一下LLJ大佬的理论AC大法
  20. 哪些著名软件是用C、C++编写的?

热门文章

  1. 获取访客进站关键词_拼多多访客突然下降是为什么?拼多多访客突然暴涨又是怎么回事?...
  2. php 结构体_【开发规范】PHP编码开发规范下篇:PSR-2编码风格规范
  3. internetreadfile读取数据长度为0_【完结】TensorFlow2.0 快速上手手册
  4. android listview动态加载网络图片不显示,Android Listview异步动态加载网络图片
  5. 如何在跑cts的时候生成log_为什么要买奥铃CTS?听听用户的评价
  6. 素性测试的Miller-Rabin算法完全解析 (C语言实现、Python实现)
  7. omitting directory `folder/'
  8. Struts2 拦截器: 拦截器与过滤器区别
  9. 求数组中的最小子数组,时间复杂度o(n),java
  10. JavaScript数组内置排序函数