linux 中的signal 函数

linux 中的signal 函数,第1张

这是个函数指针

void ( *func )( int )是一个接受一个int型参数,不返回的函数的指针

比如:

void F( int a ) { print( "%d", a )}

void ( *func )( int ) = F

func( 3 )// 调用F函数输出3

作为函数参数的函数指针有一个专门的名称叫做回调,你可以把任意满足回调函数参数特征标的函数地址作为参数传给signal。

在这里因为signal对于sig参数可以指定用户自定义的信号处理函数,所以你可以把你要处理的这个sig的函数地址作为参数传给signal,那么系统接收到对应sig的时候就会通过你传进去的地址调用你的这个函数。

signal,此函数相对简单一些,给定一个信号,给出信号处理函数则可,当然,函数简单,其功能也相对简单许多,简单给出个函数例子如下:

   #include <signal.h>  

   #include <stdio.h>  

   #include <unistd.h>  

     

   void ouch(int sig)  

   {  

       printf("I got signal %d\n", sig)  

       // (void) signal(SIGINT, SIG_DFL)  

      //(void) signal(SIGINT, ouch)  

    

  }  

       

 int main()  

 {  

     (void) signal(SIGINT, ouch)  

  

     while(1)  

    {  

        printf("hello world...\n")  

         sleep(1)  

     }  

 }

当然,实际运用中,需要对不同到signal设定不同的到信号处理函数,SIG_IGN忽略/SIG_DFL默认,这俩宏也可以作为信号处理函数。同时SIGSTOP/SIGKILL这俩信号无法捕获和忽略。注意,经过实验发现,signal函数也会堵塞当前正在处理的signal,但是没有办法阻塞其它signal,比如正在处理SIG_INT,再来一个SIG_INT则会堵塞,但是来SIG_QUIT则会被其中断,如果SIG_QUIT有处理,则需要等待SIG_QUIT处理完了,SIG_INT才会接着刚才处理。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/7130346.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-02
下一篇 2023-04-02

发表评论

登录后才能评论

评论列表(0条)

保存