使用者空間的signal函式說明

2021-09-30 06:50:52 字數 1933 閱讀 1017

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 這個式子與上面式子的區別在於用...