signal函数介绍

#include <signal.h>
signal(参数1,参数2);
参数1:我们要进行处理的信号。系统的信号我们可以再终端键入kill -l查看(共64个)。其实这些信号时系统定义的宏。
参数2:我们处理的方式(是系统默认还是忽略还是捕获)。

有3种操作方式。
(1)eg: signal(SIGINT ,SIG_ING );
(2)eg: signal(SIGINT ,SIG_DFL );
(3)void ( signal( int sig, void ( handler)( int )))( int );

signal函数应用

用户在键盘输入CTRL+C时,将会向进程发送一个类型为SIGINT的消息,下面程序当用户在键盘按下CTRL +C键时会打印该信号的number.可以看出该信号的num为2要想退出可以按下CTRL +\打印结果为最后一行。

// 062.c 响应signal的回调函数1
#include<stdio.h>
#include<signal.h>
typedef void (* signal_handler)(int);
void signal_handler_fun(int signal_num)
{printf("catch signal1 %d\n",signal_num);
}
int main(int argc,char *argv[])
{signal_handler psignal=signal_handler_fun;signal(SIGINT,psignal);for(;;);return 0;
}

signal函数接收键盘信息并控制子线程结束

下面程序主线程接收用户键盘输入,回调函数设置aline为0,控制子线程运行结束。

//063.c 响应signal的回调函数,通知线程结束
#include <stdio.h>
#include <pthread.h>
#include <signal.h>
#include <errno.h>
static int alive = 0;
static void *icmp_recv(void *argv);
static void *icmp_send(void *argv);
static void icmp_sigint(int signo);
int main(int argc, char *argv[])
{alive = 1;pthread_t send_id, recv_id; /*截取信号SIGINT,将icmp_sigint挂接上*///SIGINT由CTRL +C产生signal(SIGINT, icmp_sigint);    int err = 0;//创建发送ICMP包线程err = pthread_create(&send_id, NULL, icmp_send, NULL);   if(err < 0){return -1;}//创建接收ICMP包线程err = pthread_create(&recv_id, NULL, icmp_recv, NULL);      /*接收*/if(err < 0){return -1;}pthread_join(send_id, NULL);pthread_join(recv_id, NULL);return 0;
}static void* icmp_send(void *argv)
{while(alive){printf("我是ICMP包发送端线程。\n");sleep(1);}
}
static void *icmp_recv(void *argv)
{while(alive){printf("--ICMP包接收端线程--。\n");sleep(1);}
}
static void icmp_sigint(int signo)
{//控制两个线程使其结束alive = 0;
}

Linux中signal函数相关推荐

  1. linux中signal函数返回值,signal函数、sigaction函数及信号集操作函数

    信号是与一定的进程相联系的.也就是说一个进程可以决定在进程中对哪些信号进行什 么样的处理.例如一个进程可以忽略某些信号而只处理其他一些信号另外一个进程还可以选择如何处理信号.总之这些总与特定的进程相联 ...

  2. linux中signal函数的简单用法

    信号是软件中断,它提供了一种处理异步事件的方法,每个信号有个以SIG打头的名字,讲signal函数之前我们先了解下当前系统所支持的信号名称,在linux中敲下kill -l就能查看. [lingyun ...

  3. Linux中pthread_create函数的实现

    转:http://blog.sina.com.cn/s/blog_6abf2c040101fpca.html 原文地址:[原]Linux中pthread_create函数的实现作者:jiq408694 ...

  4. linux 中 sigaction 函数详解

    linux 中 sigaction 函数详解 一.函数原型 sigaction 函数的功能是检查或修改与指定信号相关联的处理动作(可同时两种操作) int sigaction(int signum, ...

  5. linux中probe函数传递参数的寻找(下)

    点击打开链接 linux中probe函数传递参数的寻找(下) 通过追寻driver的脚步,我们有了努力的方向:只有找到spi_bus_type的填充device即可,下面该从device去打通,当两个 ...

  6. linux中 probe函数的何时调用的?

    点击打开链接 linux中 probe函数何时调用的 所以的驱动教程上都说:只有设备和驱动的名字匹配,BUS就会调用驱动的probe函数,但是有时我们要看看probe函数里面到底做了什么,还有传递给p ...

  7. 每天学一点儿shell:linux中时间函数的date的用法

    文章目录 1.linux中date函数格式 2.date日期函数的具体用法 2.1.获取相应格式的日期 2.2.获取相隔时间段的日期 2.2.1.获取今天的日期 2.2.2.获取昨天的日期 2.2.3 ...

  8. linux中request_region()函数的分析

    linux中request_region()函数的分析 struct resource ioport_resource = { .name = "PCI IO", .start = ...

  9. linux内核sock_sendmsg,为什么linux中sendto函数中的msg.msg_iovlen=1;

    为什么linux中sendto函数中的msg.msg_iovlen=1; | 内核中定义的sys_sendto的源码吗? 这个属于sendmsg中struct msghdr的用法问题, sys_sen ...

最新文章

  1. git教程——简单总结
  2. 1.1 基础-取近似值
  3. VTK:绘图之Histogram2D
  4. nginx转发websocket
  5. leetcode 542. 01 Matrix | 542. 01 矩阵(图解,广度优先搜索)
  6. 笔记本软件页面分辨率低_AMD宠粉日 适合设计师的高色域笔记本电脑
  7. 作者:程学旗,男,中国科学院计算技术研究所研究员、博士生导师,中国科学院“网络数据科学与技术”重点实验室主任。...
  8. ES2020的新特性解读
  9. 脊髓损伤有哪些方法方法?顾连康复方法有哪些
  10. [Java]HashMap的两种排序方式
  11. Mac下载安装maven
  12. P2P文件快传测试用例
  13. 计算机网络原理(谢希仁第八版)第五章课后习题答案
  14. 《深入J2SDK》 总结
  15. WebRoot 与 WEB-INF 相关问题学习整理
  16. Excel合并单元格快捷键
  17. 今后,若你的公众号还按老方式发广告,罚款高的可达百万。有公众号已经被惩处了。
  18. 看完,感触很多 “IT技术开发人员获得成功的六大步骤”
  19. 传统医药厂家如何进行社交电商+新零售+私域流量,附方案讲解
  20. python实现易统计自动打卡

热门文章

  1. 【零代码平台】基于Vue实现商城可视化搭建 Mall-Cook
  2. Vue的包裹元素标签template
  3. 太阳能控制器负载无电压
  4. 浅谈bootloader【谈的很清晰明白】
  5. ASM _asm_hbeatiowait
  6. 汽车标定知识整理(一):标定简介与CCP报文协议简介
  7. ERROR: All flavors must now belong to a named flavor dimension. Learn more at https://d.android.com/
  8. 树莓派改游戏机 retropie折腾记录
  9. 强大视频分割软件:Boilsoft Video Splitter 7.01.1绿色便携版
  10. Go语言——测试与性能