关于信号处理函数的参数问题!signal ???

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于信号处理函数的参数问题!signal ???相关的知识,希望对你有一定的参考价值。

void (* signal (int signum, void (*handler)(int))) (int);这个是signal 函数的原型,请问一下,最后的一个(int),该怎么理解?? 谢谢!

void (*handler)(int);

//函数指针,指针名为handler。

//指向一类这样的函数:

    函数返回值为void(无)

    函数有一个入参,参数类型是int

调用的时候第二个参数直接写上你的槽函数名字就可以了。

参考技术A 那是signal返回值也是一个函数指针,所以就是这样的形式,看起来是有点别扭。你看看下面这种拆开的形式就容易理解了。
typedef void (*sigfunc)(int);
sigfunc signal(int signum, sigfunc func);

也就是signal函数需要有个函数指针为参数,同时也返回的是这个类型的函数指针,即该信号之前的处理方式.
参考技术B 这是一个函数指针吧
输入的参数是int

signal函数

摘:http://blog.csdn.net/ta893115871/article/details/7475095

在<signal.h> 这个头文件中。

signal(参数1,参数2);

参数1:我们要进行处理的信号。系统的信号我们可以再终端键入 kill -l查看(共64个)。其实这些信号时系统定义的宏。

参数2:我们处理的方式(是系统默认还是忽略还是捕获)。

在linux下查看参数1:kill -l,含义:

Signal Description
SIGABRT 由调用abort函数产生,进程非正常退出
SIGALRM 用alarm函数设置的timer超时或setitimer函数设置的interval timer超时
SIGBUS 某种特定的硬件异常,通常由内存访问引起
SIGCANCEL 由Solaris Thread Library内部使用,通常不会使用
SIGCHLD 进程Terminate或Stop的时候,SIGCHLD会发送给它的父进程。缺省情况下该Signal会被忽略
SIGCONT 当被stop的进程恢复运行的时候,自动发送
SIGEMT 和实现相关的硬件异常
SIGFPE 数学相关的异常,如被0除,浮点溢出,等等
SIGFREEZE Solaris专用,Hiberate或者Suspended时候发送
SIGHUP 发送给具有Terminal的Controlling Process,当terminal被disconnect时候发送
SIGILL 非法指令异常
SIGINFO BSD signal。由Status Key产生,通常是CTRL+T。发送给所有Foreground Group的进程
SIGINT 由Interrupt Key产生,通常是CTRL+C或者DELETE。发送给所有ForeGround Group的进程
SIGIO 异步IO事件
SIGIOT 实现相关的硬件异常,一般对应SIGABRT
SIGKILL 无法处理和忽略。中止某个进程
SIGLWP 由Solaris Thread Libray内部使用
SIGPIPE 在reader中止之后写Pipe的时候发送
SIGPOLL 当某个事件发送给Pollable Device的时候发送
SIGPROF Setitimer指定的Profiling Interval Timer所产生
SIGPWR 和系统相关。和UPS相关。
SIGQUIT 输入Quit Key的时候(CTRL+\)发送给所有Foreground Group的进程
SIGSEGV 非法内存访问
SIGSTKFLT Linux专用,数学协处理器的栈异常
SIGSTOP 中止进程。无法处理和忽略。
SIGSYS 非法系统调用
SIGTERM 请求中止进程,kill命令缺省发送
SIGTHAW Solaris专用,从Suspend恢复时候发送
SIGTRAP 实现相关的硬件异常。一般是调试异常
SIGTSTP Suspend Key,一般是Ctrl+Z。发送给所有Foreground Group的进程
SIGTTIN 当Background Group的进程尝试读取Terminal的时候发送
SIGTTOU 当Background Group的进程尝试写Terminal的时候发送
SIGURG 当out-of-band data接收的时候可能发送
SIGUSR1 用户自定义signal 1
SIGUSR2 用户自定义signal 2
SIGVTALRM setitimer函数设置的Virtual Interval Timer超时的时候
SIGWAITING Solaris Thread Library内部实现专用
SIGWINCH 当Terminal的窗口大小改变的时候,发送给Foreground Group的所有进程
SIGXCPU 当CPU时间限制超时的时候
SIGXFSZ 进程超过文件大小限制
SIGXRES Solaris专用,进程超过资源限制的时候发送

以上是关于关于信号处理函数的参数问题!signal ???的主要内容,如果未能解决你的问题,请参考以下文章

关于QT中的signal 和 slot 中带参数问题

signal函数

signal的函数名: signal

C语言signal()函数(通过设置一个函数(回调函数)来处理捕获到异常信号时需要执行的操作)

信号---signal函数详解

signal()函数