c traps and pitfalls 對signal函式解釋得非常詳細。
中void ( *signal( int sig, void (* handler)( int ))) ( int );
int (*p)();
這是乙個函式指標, p所指向的函式是乙個不帶任何引數, 並且返回值為int的乙個函式.
int (*fun())();
這個式子與上面式子的區別在於用fun()代替了p,而fun()是乙個函式,所以說就可以看成是fun()這個函式執行之後,它的返回值是乙個函式指標,這個函式指標(其實就是上面的p)所指向的函式是乙個不帶任何引數,並且返回值為int的乙個函式.
void (*signal(int signo, void (*handler)(int)))(int);就可以看成是signal()函式(它自己是帶兩個引數,乙個為整型,乙個為函式指標的函式), 而這個signal()函式的返回值也為乙個函式指標,這個函式指標指向乙個帶乙個整型引數,並且返回值為void的乙個函式.
在寫訊號處理函式時對於訊號處理的函式也是void sig_fun(int signo);這種型別,恰好與上面signal()函式所返回的函式指標所指向的函式是一樣的.
void ( *signal() )( int );
signal是乙個函式, 它返回乙個函式指標, 後者所指向的函式接受乙個整型引數 且沒有返回值, 仔細看, 是不是siganal( int signo, void (*handler)(int) )的第2個引數了, 對了, 其實他所返回的就是 signal的第2個訊號處理函式, 指向訊號處理函式, 就可以執行函式了( signal內部時, signal把訊號做為引數傳遞給handler訊號處理函式, 接著 signal 函式返回指標, 並且又指向訊號處理函式, 就開始執行它)
那麼,signal函式的引數又是如何呢?signal函式接受兩個引數:乙個整型的訊號編號,以及乙個指向使用者定義的訊號處理函式的指標。我們此前已經定義了指向使用者定義的訊號處理函式的指標sfp:
void (*sfp)(int);
sfp 的型別可以通過將上面的宣告中的sfp去掉而得到,即void (*)(int)。此外,signal函式的返回值是乙個指向呼叫前的使用者定義訊號處理函式的指標,這個指標的型別與sfp指標型別一致。因此,我們可以如下宣告signal函式:
void (*signal(int, void(*)(int)))(int);
同樣地,使用typedef可以簡化上面的函式宣告:
typedef void (*handler)(int);handler signal(int, handler);
下面來看乙個簡單的例子:
#include
#include
#include
void sigroutine(int dunno)
return;
}int main()
其中訊號sigint由按下ctrl-c發出,訊號sigquit由按下ctrl-發出。該程式執行的結果如下:
localhost:~$ ./sig_test
process id is 463
get a signal -sigint //按下ctrl-c得到的結果
get a signal -sigquit //按下ctrl-得到的結果
//按下ctrl-z將程序置於後台
[1]+ stopped ./sig_test
localhost:~$ bg
[1]+ ./sig_test &
localhost:~$ kill -hup 463 //向程序傳送sighup訊號
localhost:~$ get a signal – sighup
kill -9 463 //向程序傳送sigkill訊號,終止程序
localhost:~$
signal函式說明
c traps and pitfalls 對signal函式解釋得非常詳細。中void signal int sig,void handler int int int p 這是乙個函式指標,p所指向的函式是乙個不帶任何引數,並且返回值為int的乙個函式.int fun 這個式子與上面式子的區別在於用...
signal()函式說明
表頭檔案 include 功 能 設定某一訊號的對應動作 函式原型 void signal int signum,void handler int int 或者 typedef void sig t int sig t signal int signum,sig t handler 引數說明 第乙個...
signal函式說明
c traps and pitfalls 對signal函式解釋得非常詳細。中void signal int sig,void handler int int int p 這是乙個函式指標,p所指向的函式是乙個不帶任何引數,並且返回值為int的乙個函式.int fun 這個式子與上面式子的區別在於用...