Linux?signal()函数的使用学习

 更新时间:2023年05月14日 11:12:37   作者:chnmagnus  
这篇文章主要为大家介绍了Linux?signal()函数的使用学习及示例解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
(福利推荐:【腾讯云】服务器最新限时优惠活动,云服务器1核2G仅99元/年、2核4G仅768元/3年,立即抢购>>>:9i0i.cn/qcloud

(福利推荐:你还在原价购买阿里云服务器?现在阿里云0.8折限时抢购活动来啦!4核8G企业云服务器仅2998元/3年,立即抢购>>>:9i0i.cn/aliyun

signal() 函数

无意中看到了 signal() 函数,感觉对这个函数的原型有诸多疑惑,学习一下,顺便分享。

1. 原型

Unix系统提供了signal()和sigaction()两个函数来改变对于信号的处理方法。其中signal()是一个基于sigaction()系统调用的glibc库函数,其行为在不同的Unix操作系统存在差异,对于可移植性有要求的程序不能使用signal()函数。

其原型如下:

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

signal函数的第一个参数sig,要传入希望修改处理函数的信号编号,第二个参数,是一个无返回值、接受一个int形参的函数指针,指向对sig信号的新处理函数。函数的第二个参数可以有三种选择,第一种是我们自己定义的信号处理函数,第二种是传入SIG_DFL 表示将之前signal所改变的信号处理方式还原,第三种是传入SIG_IGN,表示处理方式为忽略该信号,内核会直接将信号丢弃,不会传递到进程。

signal函数的返回值同样是一个无返回值、接受一个int形参的函数指针。当signal()函数成功执行时,返回值是执行signal函数之前的sig信号的处理函数的指针,如果失败,则返回SIG_ERR。

对信号处理函数指针做这样的定义,可能便于理解:

//将sighandler_t定义为返回值为void,接受一个int形参的函数的指针
typedef void (*sighandler_t)(int);
//现在我们可以这样书写signal函数
sighandler_t signal(int sig, sighandler_t handler);

其实glibc里已经有了如上的定义,只需要我们定义_GUN_SOURCE特性测试宏,就可以使用sighandler_t类型。

2.实例

以下用法用于暂时性修改某信号的信号处理函数,在使用完之后,将信号处理函数重置为其原来版本。

void newhandler(int sig){
    //code to handle the sig
}
void (*prevhandler)(int); //存储修改之前的信号处理函数
prehandler = signal(SIGINT, newhandler);
if(prehandler == SIG_ERR)  
    cerr<<"Error in signal"<<endl;
/*现在,对于中断信号的处理已经修改为我们定义的newhandler函数*/
if(signal(SIGINT, prevhandler) == SIG_ERR)
    cerr<<"Error in signal"<<endl;

以上就是Linux signal()函数的使用学习的详细内容,更多关于Linux signal函数的资料请关注程序员之家其它相关文章!

相关文章

  • Git Tag 标签详解

    Git Tag 标签详解

    这篇文章主要介绍了Git Tag 标签以及git命令之git tag给当前分支打标签的相关知识,需要的朋友可以参考下
    2017-11-11
  • windows下写的shell脚本在linux执行出错的解决办法

    windows下写的shell脚本在linux执行出错的解决办法

    这篇文章主要介绍了windows下写的shell脚本在linux执行出错的解决办法,需要的朋友可以参考下
    2014-03-03
  • shell脚本加密工具shc使用详解

    shell脚本加密工具shc使用详解

    Linux下的shell脚本用途广泛,经常包含IP、Pwd等关键信息,可读可写的特点很容易造成信息泄露,导致严重后果。基于这些原因,对脚本实施加密便变得很有必要。本文介绍shell脚本加密工具应用场景分析,一起看看吧
    2021-06-06
  • Linux中popen函数的作用小结

    Linux中popen函数的作用小结

    popen()函数通过创建一个管道,调用fork()产生一个子进程,执行一个shell以运行命令来开启一个进程。这篇文章重点给大家介绍Linux中popen函数的作用,感兴趣的朋友一起看看吧
    2018-05-05
  • NetCat工具命令介绍及远程文件传输实现

    NetCat工具命令介绍及远程文件传输实现

    这篇文章主要为大家介绍了NetCat工具命令的介绍以及远程文件传输实现,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-03-03
  • shell脚本实现日历的屏幕控制

    shell脚本实现日历的屏幕控制

    这篇文章主要为大家详细介绍了shell脚本实现日历的屏幕控制,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-07-07
  • 如何短时间内学好一门语言 shell脚本语言为例

    如何短时间内学好一门语言 shell脚本语言为例

    这篇文章主要以shell脚本语言为例,为大家介绍了如何短时间内学好一门语言,感兴趣的小伙伴们可以参考一下
    2016-09-09
  • 详解bash中的退出状态机制

    详解bash中的退出状态机制

    这篇文章主要介绍了详解bash中的退出状态机制,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-04-04
  • Linux查看端口占用情况的常用命令

    Linux查看端口占用情况的常用命令

    这篇文章主要给大家介绍了Linux查看端口占用情况的常用命令,lsof命令,netstat命令,ss命令,fuser命令,ps命令以及proc文件系统这几种常用命令,感兴趣的小伙伴跟着小编一起来看看吧
    2023-11-11
  • 脚本自动添加crontab示例

    脚本自动添加crontab示例

    这篇文章主要介绍了脚本自动添加crontab示例,需要的朋友可以参考下
    2014-04-04

最新评论

?


http://www.vxiaotou.com