- 论坛徽章:
- 0
|
1、signal 系统调用
系统调用signal用来设定某个信号的处理方法。该调用声明的格式如下:
void (*signal(int signum, void (*handler)(int)))(int);
个人理解: signal函数有两个参数 int 和void ,返回值指向一个带有INT 参数 返回VOID的函数
2. 上述声明格式比较复杂,如果不清楚如何使用,也可以通过下面这种类型定义的格式来使用(POSIX的定义):
typedef void (*sighandler_t)(int);
sighandler_t signal(int signum, sighandler_t handler);
个人理解: typedef void (*sighandler_t)(int);
sighandler_t是个指针,指向带有INT参数返回为VOID函数的首地址.
所以void (*signal(int signum, void (*handler)(int)))(int) ;可以改写成 sighandler_t signal(int signum, sighandler_t handler);
3. 实际调用
#include <signal.h>
#include <unistd.h>
#include <stdio.h>
void sigroutine(int dunno) { /* 信号处理例程,其中dunno将会得到信号的值 */
switch (dunno) {
case 1:
printf("Get a signal -- SIGHUP " ;
break;
case 2:
printf("Get a signal -- SIGINT " ;
break;
case 3:
printf("Get a signal -- SIGQUIT " ;
break;
}
return;
}
int main() {
printf("process id is %d ",getpid());
signal(SIGHUP, sigroutine); //* 下面设置三个信号的处理方法
signal(SIGINT, sigroutine);
signal(SIGQUIT, sigroutine);
for (; ;
}
void sigroutine(int dunno) 中 参数dunno是如何传递的?是在signal中调用了handler(int )?
函数SIGNAL返回值是一个函数的地址 有什么意义吗? 系统要用到这个地址?
请大家帮忙讲清楚
[ 本帖最后由 houhulou 于 2008-6-10 06:51 编辑 ] |
|