#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <signal.h>
void myfunc(int i);
int main(int argc, char *argv[])
{
int ret1,ret2;
if (argc>1)
{
if(atoi(argv[1])!=0)
{
if (signal(SIGALRM, myfunc) ==SIG_ERR)
printf("can not catch signal SIGALRM\n");
}
}
ret1=alarm(10);
printf("ret1= %d, alarm(10)\n", ret1);
// sleep(5);
// ret2=alarm(10);
// printf("ret2= %d, alarm(10)\n", ret2);
pause();
return 0;
}
void myfunc(int i)
{
if(i==SIGALRM)
{
printf("Time Up!\n");
}
}
执行:
administrator@ubuntu:~/test$ ./al
ret1= 0, alarm(10)闹钟
administrator@ubuntu:~/test$
设置了处理函数以后,之前的默认行为为什么还会执行呢。
本文深入探讨了在C++中利用信号处理技术实现特定异常捕捉的实践,详细介绍了如何定义并注册自定义信号处理函数,以及如何通过`signal()`函数将SIGALRM信号与用户自定义函数`myfunc()`关联起来。文章还展示了信号处理函数在接收到SIGALRM信号时的响应机制,并解释了为何在设置处理函数后,之前的默认行为仍能执行。
758

被折叠的 条评论
为什么被折叠?



