开发者学堂课程【物联网开发- Linux 高级程序设计全套视频:signal 函数返回值】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/660/detail/11014
signal 函数返回值
内容介绍:
一.验证 signal 函数的返回值
二.设置 fun1还是 fun2
一.验证 signal 函数的返回值
接下来验证 signal 函数的返回值,可以看到 signal 的返回值是一个编号如果成功,就是返回一个函数地址,该地址为此信号上一次注册的信号处理函数的地址。
失败的话就是返回SIG,如果上一次没有设定信号,返回值就是空的。先看main 函数,它是定义了指针变量类型, typedef 类型是自己出来的,是一个函数指针类型,用 sighandler_的变量都是函数指摘变量,没有返回值,是一个类型的。
定一个指针变量在这里面用 signal 去设置信号,当收到2号信号的时候,第一次返回值就会是 INT 这个信号,所以 return fun addr is 就会被打出来。
二.设置 fun 1 还是 fun2
然后接下来就是重新弄2号信号,当我收到2号信号的时候,就是 fun2 ,就会返回一个函数的地址,如果成功,上一次设定的信号就是变量值,其实25号的变量就是 fun1,为什么要有返回值?
我们用指针重新设定入口,保存上一次的入口,然后可以恢复,SIGOUIT这个信号是第一次设定,然后就是fun1,在这个程序里面并没有设定过,然后看 signal 2到fun1 就都会出来,就清楚了如果是第一次设定这个信号返回值就是 NULL ,如果是以后再设置的话,它的返回值就是上一次设定的入口.
但是注意到从25行以后,如果收到2号信号,它现在就不调 fun1 了 ,就调用fun2,重新设定了,设置收到那个信号调那个函数,上一次设定这个信号的入口要知道。