信号处理之signal 函数笔记
2011-12-16 23:48
483 查看
表头文件 #include<signal.h>
功 能: 设置某一信号的对应动作
函数原型 :void (*signal(int signum,void(* handler)(int)))(int);
或者:typedef void(*sig_t) ( int );
sig_t signal ( int signum , sig_t handler); (sig_t 表示 “指向函数的指针” 这一种数据类型)
参数说明:
第一个参数signum指明了所要处理的信号类型,它可以取除了SIGKILL和SIGSTOP外的任何一种信号。
第二个参数handler描述了与信号关联的动作,它可以取以下三种值:
(1)一个返回值为正数的函数地址
此函数必须在signal()被调用前申明,handler中为这个函数的名字。当接收到一个类型为sig的信号时,就执行handler 所指定的函数。这个函数应有如下形式的定义:
int func(int sig);
sig是传递给它的唯一参数。执行了signal()调用后,进程只要接收到类型为sig的信号,不管其正在执行程序的哪一部分,就立即执行func()函数。当func()函数执行结束后,控制权返回进程被中断的那一点继续执行。
(2)SIGIGN
这个符号表示忽略该信号,执行了相应的signal()调用后,进程会忽略类型为sig的信号。
(3)SIGDFL
这个符号表示恢复系统对信号的默认处理。
理解:
重要是理解指向函数的指针,其一般定义形式为: 数据类型 ( * 指针变量名 )( 函数参数表列 )
void ( *signal() )( int );
signal是一个函数, 它返回一个函数指针, 后者所指向的函数接受一个整型参数 且没有返回值, 仔细看, 是不是siganal( int signo, void (*handler)(int) )的第2个参数了, 对了, 其实他所返回的就是 signal的第2个信号处理函数, 指向信号处理函数, 就可以执行函数了( signal内部时, signal把信号做为参数传递给handler信号处理函数, 接着 signal 函数返回指针, 并且又指向信号处理函数, 就开始执行它)
其实调用signal函数时只是给第一个参数一个信号量,然后signal 函数通过此信号量得到一个int类型值,再传给signal第二个参数(即信号处理函数)去执行。
参考:百科 http://baike.baidu.com/view/64630.htm
博客 http://blog.sina.com.cn/s/blog_6038fae80100mmmr.html
功 能: 设置某一信号的对应动作
函数原型 :void (*signal(int signum,void(* handler)(int)))(int);
或者:typedef void(*sig_t) ( int );
sig_t signal ( int signum , sig_t handler); (sig_t 表示 “指向函数的指针” 这一种数据类型)
参数说明:
第一个参数signum指明了所要处理的信号类型,它可以取除了SIGKILL和SIGSTOP外的任何一种信号。
第二个参数handler描述了与信号关联的动作,它可以取以下三种值:
(1)一个返回值为正数的函数地址
此函数必须在signal()被调用前申明,handler中为这个函数的名字。当接收到一个类型为sig的信号时,就执行handler 所指定的函数。这个函数应有如下形式的定义:
int func(int sig);
sig是传递给它的唯一参数。执行了signal()调用后,进程只要接收到类型为sig的信号,不管其正在执行程序的哪一部分,就立即执行func()函数。当func()函数执行结束后,控制权返回进程被中断的那一点继续执行。
(2)SIGIGN
这个符号表示忽略该信号,执行了相应的signal()调用后,进程会忽略类型为sig的信号。
(3)SIGDFL
这个符号表示恢复系统对信号的默认处理。
理解:
重要是理解指向函数的指针,其一般定义形式为: 数据类型 ( * 指针变量名 )( 函数参数表列 )
void ( *signal() )( int );
signal是一个函数, 它返回一个函数指针, 后者所指向的函数接受一个整型参数 且没有返回值, 仔细看, 是不是siganal( int signo, void (*handler)(int) )的第2个参数了, 对了, 其实他所返回的就是 signal的第2个信号处理函数, 指向信号处理函数, 就可以执行函数了( signal内部时, signal把信号做为参数传递给handler信号处理函数, 接着 signal 函数返回指针, 并且又指向信号处理函数, 就开始执行它)
其实调用signal函数时只是给第一个参数一个信号量,然后signal 函数通过此信号量得到一个int类型值,再传给signal第二个参数(即信号处理函数)去执行。
参考:百科 http://baike.baidu.com/view/64630.htm
博客 http://blog.sina.com.cn/s/blog_6038fae80100mmmr.html
相关文章推荐
- [学习笔记]信号基本概念(中断和信号)/名称及常用信号/信号处理/signal函数实践
- 《UNIX环境高级编程》笔记--信号及其处理函数signal
- uc笔记08---信号处理,signal,子进程的信号处理
- 信号处理signal、sigaction、pause、信号嵌套处理、不可重入函数
- siginalExample.c(使用signal和sigaction函数捕捉和处理信号)
- 设置信号信号处理函数void (*signal (int signo ,void (*fun)(int )))(int)
- 标准库函数---信号处理函数--signal
- 关于 Linux 中 signal 函数信号处理的讨论
- 标准库函数---信号处理函数--signal
- linux信号signal处理函数 ,多线程信号处理
- C/C++ signal 信号处理函数
- Linux信号来源和捕获处理以及signal函数简介
- [学习笔记]信号处理函数遇上可重入和不可重入函数
- UNIX环境编程学习笔记(25)——信号处理进阶学习之 sigaction 函数
- Linux下利用signal函数处理ctrl+c等信号
- signal signal函数每次设置具体的信号处理函数(非SIG_IGN)只能生效一次,多次调用需要调用时在加类似监听的方法!!! 最好用sigaction
- linux之信号处理函数signal和sigaction
- 信号处理函数signal的使用
- 王保明老师Linux学习笔记---------信号----signal()函数使用实例
- Xcode里调试signal的信号回调处理函数