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