- 论坛徽章:
- 0
|
本文主要参考《unix环境高级编程》
这个函数应该是我看过最复杂的函数吧,最少到现在是(其实我也没看过多少代码--)。
#include
void (*signal(int signo, void (*func)(int)))(int);
讲点我的理解:首先函数signal有两个参数,返回一个函数指针
第一个参数signo是一个整数,一般把具体什么信号传给他,第二个参数是函数指针,他是指向新的信号处理函数。
返回值可以理解成返回调用signal之前的signo里面信号对应的信号处理函数。
如果使用typedef,简化后的signal函数更容易理解:
typedef void Sigfunc(int);
Sigfunc *signal(int,Sigfunc *);
在头文件里面有如下的形式声明:
#define SIG_ERR (void (*)())-1 信号处理错误
#define SIG_DFL (void (*)())0 信号后动作是系统默认动作
#define SIG_IGN (void (*)())1 内核忽略此信号
当不是SIG_DFL,SIG_IGN,而且指定函数地址,那么信号发生时,调用此函数。
例程看apue上p241的程序清单10-1;
我只是想将一下我的理解:首先在主程序中把你关心的信号通过调用signal函数,发生对应事件后向主程序发送信号,然后中断执行信号处理程序。(暂时我理解就是这样的,可能还不够准确吧)。
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/66435/showart_1384940.html |
|