Chinaunix首页 | 论坛 | 博客
  • 博客访问: 121922
  • 博文数量: 41
  • 博客积分: 1695
  • 博客等级: 上尉
  • 技术积分: 430
  • 用 户 组: 普通用户
  • 注册时间: 2006-10-21 22:50
文章分类

全部博文(41)

文章存档

2010年(1)

2007年(23)

2006年(17)

我的朋友

分类: C/C++

2007-04-14 21:10:19

#include  
Void (*signal(int signo, void (*func)(int)))(int);
 
返回值是之前的signal处理函数,错误返回SIG_ERR 
1. Signo:signal的名称
2. Func:函数地址,或者是SIG_IGN(忽略Signal)或SIG_DFL(缺省行为)。原型为:void (*)(int)。不过很多UNIX的实现也会传入一些和实现相关的参数。

######################################################################

#include
#include
#include
void sig_quit(int signo)
{
    printf("caught SIGQUIT\n");
    signal(SIGQUIT, SIG_DFL);
    return ;
}
int main(int argc, char *argv[])
{
    unsigned int unslept;
    signal(SIGQUIT, sig_quit);
    while(1);
    return 0;
}
$a.out
^\
caught SIGQUIT
^\Quit

####################################################################

#include
#include
#include
void sig_quit(int signo)
{
    printf("caught SIGQUIT\n");
    return ;
}
int main(int argc, char *argv[])
{
    unsigned int unslept;
    signal(SIGQUIT, sig_quit);
    while(1);
    return 0;
}
$a.out
^\caught SIGQUIT
^\caught SIGQUIT
^\caught SIGQUIT
^\caught SIGQUIT

##################################################################

#include
#include
#include
void sig_quit(int signo)
{
    printf("caught SIGQUIT\n");
    printf("caught SIGQUIT\n");//有无结果一样
    return ;
}
int main(int argc, char *argv[])
{
    unsigned int unslept;
    signal(SIGQUIT, sig_quit);
    unslept = sleep(20);
    printf("unslept time = %u\n", unslept);
    return 0;
}
$a.out
^\caught SIGQUIT
unslept time = 19

###############################################################

#include
#include
#include

int main(int argc, char *argv[])
{
    unsigned int unslept;
   
printf("caught SIGQUIT\n");
    unslept = sleep(20);
    printf("unslept time = %u\n", unslept);
    return 0;
}
$a.out
^\Quit





 

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