LINUX中signal函数的理解


LINUX中信号函数定义的比较复杂,原来总结的,现在修改一下贴出来。

void (*signal (int signo, void (*func)(int))) (int);

可 以改写成void (*XXXX) (int);XXXX为一个函数指针,那么这个函数指针是从哪儿来的呢。他是通过*signal (int signo, void (*func)(int))这个函数返回的,在C语言中void *func()返回一个void指针,{注意:void(*func)()由于括号优先级高,所以FUNC是指向的一个函数的指针,而且认为这里的这个*应该不是原先理解的意思,应该只是指明这是外面函数的一个函数指针,而返回的才是一个真正的函数指针2008-7-25} ,而这个返回的函数指针从哪里来得到呢。从函数来看,只能从void (*func)(int)来得到。这样,就好理解了,*signal (int signo, void (*func)(int))这个函数返回了一个指向void (*func)(int)函数的指针,即func的指针。下面我们再理解用typedef void (*sighandler_t)(int)定义就好理解了。

可以将其改写成:

typedef void (*sighandler_t)(int);

sighandler_t signal(int signum, sighandler_t handler);

注意这个蓝色部分:由于void (*signal (int signo, void (*func)(int))) (int)中最后的(int)已经由sighandler_t handler中的handler默认带有。

 

版权所有:http://fpcfjf.blog.163.com/blog/static/554697932011116113736142/


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM