#include
#include
#include /*
typedef void (* signal_handler)(int) --定义一个signal_handler函数指针类型
signal_handler signal(int signo, signal_handler sig_handler); --声明一个signal函数,函数返回值为signal_handler函数指针类型,
入参为int型和signal_handler函数指针类型
signal函数
入参: 1.信号值 2.信号处理函数,为函数指针,指向一个无返回值,入参为int型的函数
返回值:1.返回值为函数指针,这个函数指针也是指向一个无返回值,入参为int型的函数
返回值含义: man手册中描述signal() returns the previous value of the signal handler, signal_2函数对此做了解释,意思就是返回上一次处理这个信号的处理函数的地址
函数原型:
void (* signal(int signo, void (*handler)(int)))(int)
*/#if 0
void signal_handler_1(int signo)
{printf("signal_handler_1 input-> signo:%d-(SIGINT)\n", signo);
}int signal_1()
{int ret = -1;/*signal_1 简单测试一下第一次执行signal函数的返回值*/ret = signal(SIGINT, signal_handler_1);printf("signal_1 output-> ret:%d-(return value)\n", ret); /*ret = 0*/raise(SIGINT);
}
#endif#if 1
void signal_handler_2_1(int signo)
{printf("signal_handler_2_1 input-> signo:%d-(%s)\n", signo, strsignal(signo));
}void signal_handler_2_2(int signo)
{printf("signal_handler_2_2 input-> signo:%d-(%s)\n", signo, strsignal(signo));
}int signal_2()
{int ret1 = -1;int ret2 = -1;printf("signal_handler_2_1_addr:%#x \n", signal_handler_2_1);printf("signal_handler_2_2_addr:%#x \n", signal_handler_2_2);/*signal_2 测试signal返回值的含义*/ret1 = signal(SIGINT, signal_handler_2_1);ret2 = signal(SIGHUP, signal_handler_2_2);printf("signal_2 output-> ret1:%d-(return value)\n", ret1);printf("signal_2 output-> ret2:%d-(return value)\n", ret2);raise(SIGINT);raise(SIGHUP);printf("do step 1 --------------\n\n\n");/*单独执行以上步骤ret1=ret2=0,继续*/ret1 = signal(SIGINT, signal_handler_2_1);ret2 = signal(SIGHUP, signal_handler_2_2);printf("signal_2 output-> ret1:%d-%#x-(return value)\n", ret1, ret1);printf("signal_2 output-> ret2:%d-%#x-(return value)\n", ret2, ret2);raise(SIGINT);raise(SIGHUP);printf("do step 2 --------------\n\n\n");/*继续执行之后, ret1=signal_handler_2_1函数的地址, ret2=signal_handler_2_2函数的地址,继续*/ret1 = signal(SIGINT, signal_handler_2_2);ret2 = signal(SIGHUP, signal_handler_2_1);printf("signal_2 output-> ret1:%d-%#x-(return value)\n", ret1, ret1);printf("signal_2 output-> ret2:%d-%#x-(return value)\n", ret2, ret2);raise(SIGINT);raise(SIGHUP);printf("do step 3 --------------\n\n\n");/*继续执行之后, ret1=signal_handler_2_1函数的地址, ret2=signal_handler_2_2函数的地址,继续*/ret1 = signal(SIGINT, signal_handler_2_1);ret2 = signal(SIGHUP, signal_handler_2_2);printf("signal_2 output-> ret1:%d-%#x-(return value)\n", ret1, ret1);printf("signal_2 output-> ret2:%d-%#x-(return value)\n", ret2, ret2);raise(SIGINT);raise(SIGHUP);printf("do step 4 --------------\n\n\n");/*继续执行之后, ret1=signal_handler_2_2函数的地址, ret2=signal_handler_2_1函数的地址*//*执行到最后应该就明白了吧*/
}
#endifint main()
{//gnal_1();signal_2();return 0;
}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!