免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 819 | 回复: 0
打印 上一主题 下一主题

signal函数 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-11-06 18:38 |只看该作者 |倒序浏览

本文主要参考《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
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP