Chinaunix首页 | 论坛 | 博客
  • 博客访问: 850970
  • 博文数量: 213
  • 博客积分: 5048
  • 博客等级: 大校
  • 技术积分: 1883
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-14 10:14
文章分类

全部博文(213)

文章存档

2011年(4)

2010年(55)

2009年(47)

2008年(107)

我的朋友

分类: LINUX

2008-11-06 18:38:30

本文主要参考《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函数,发生对应事件后向主程序发送信号,然后中断执行信号处理程序。(暂时我理解就是这样的,可能还不够准确吧)。

 

阅读(1047) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~