Linux signal()函数的使用学习

 更新时间:2023年05月14日 11:12:37   作者:chnmagnus  
这篇文章主要为大家介绍了Linux signal()函数的使用学习及示例解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

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函数的资料请关注脚本之家其它相关文章!

相关文章

  • Shell四种运行方式(启动方式)的实现

    Shell四种运行方式(启动方式)的实现

    这篇文章主要介绍了Shell四种运行方式(启动方式)的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • Linux网络设置详情

    Linux网络设置详情

    这篇文章主要介绍了Linux网络设置,需要的朋友可以参考下面文章内容
    2021-08-08
  • 详解Linux中退出编辑模式的命令

    详解Linux中退出编辑模式的命令

    这篇文章主要介绍了Linux中退出编辑模式的命令,本文给大家介绍的非常详细,具有一定的参考借鉴价值 ,需要的朋友可以参考下
    2019-05-05
  • UNIX sh(Bourne Shell)脚本里面使用数组的两种方法

    UNIX sh(Bourne Shell)脚本里面使用数组的两种方法

    这篇文章主要介绍了UNIX sh(Bourne Shell)脚本里面使用数组的两种方法 ,需要的朋友可以参考下
    2016-12-12
  • Shell脚本监控目录内文件改动

    Shell脚本监控目录内文件改动

    这篇文章主要介绍了Shell脚本监控目录内文件改动,需要的朋友可以参考下
    2017-05-05
  • linux安装php扩展脚本分享

    linux安装php扩展脚本分享

    本文主要介绍了linux下安装php扩展的步骤,安装是由shell批量执行的,,需要的朋友可以参考下
    2014-03-03
  • 详谈Linux写时拷贝技术(copy-on-write)必看篇

    详谈Linux写时拷贝技术(copy-on-write)必看篇

    下面小编就为大家带来一篇详谈Linux写时拷贝技术(copy-on-write)必看篇。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-07-07
  • linux shell命令行参数用法详解

    linux shell命令行参数用法详解

    本文介绍了linux shell命令行参数的具体用法,用户登录到Linux系统时,可以看到一个shell提示符,标识了命令行的开始。用户可以在提示符后面输入任何命令及参数。
    2014-04-04
  • linux shell实现随机数几种方法分享(date,random,uuid)

    linux shell实现随机数几种方法分享(date,random,uuid)

    这篇文章主要介绍了linux shell实现随机数多种方法(date,random,uuid),需要的朋友可以参考下
    2015-10-10
  • Shell Script条件判断详解

    Shell Script条件判断详解

    ShellScript中,命令执行后的返回状态可以用于条件判断,其中0表示成功,1-255表示失败,重定向操作允许控制命令输出,包括覆盖和追加方式,逻辑操作符&&和||用于根据命令状态执行逻辑判断,IF语句则是基于命令的执行结果来分支执行不同的代码块,支持if、elif和else关键字
    2024-09-09

最新评论