|
发表于 2006-3-4 09:08:35
|
显示全部楼层
这种通过判断用户堆栈中是否存在sigreturn地址的方法来判断是否在信号处理函数的方法实在不太合适。纵览Linux内核各个不同的体系结构的实现可以看到,体系结构不同sigreturn的地址也不同,而且根据posix规定,信号返回的处理函数可以由用户自行制定,用户可以设置sigretore之类的函数来更改sigreturn的地址。还有sighandler的函数原型也不确定,根据在登记信号处理函数时设置的标识不同,信号处理函数有时只需要一个参数,有时需要3个参数。体系结构不同、函数原型不同和编译器的C语言调用规则不同导致信号处理函数的堆栈也不同。这样根据sigreturn来判断是否在信号处理函数中,就会导致代码非常缺乏可移植性。同时也加大了代码的难度和可理解性。想想肯定有其它更好的方法代替。
camelguo@gmail.com
http://camelguo1978.blogcn.com
^_^ |
|