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/