signal函式的缺點

2021-06-12 22:52:55 字數 690 閱讀 8944

signal函式的缺點:

1.函式的原型

typedef void(*sighandler_t)(int);

sighandler_t signal(int signum, sighandler_t  handler);

其中handler指定當訊號signum發生時的行為,可取以下三個值:sig_ign,sig_del,函式位址。

2.當乙個訊號發生時,根據handler取值的不同,相應的行為也不同:

* 如果handler為sig_ign,就忽略這個訊號

* 如果handler為sig_del,就採取預設動作

* 如果handler被指定為乙個函式位址,首先可能會發生這兩種情況之一:要麼將此訊號的行為被重置為sig_del,要麼阻塞這個訊號

然後,才執行對應的訊號處理函式,並且如果是阻塞這個訊號的話,當從處理函式返回時,就解阻塞此訊號。

注意: 在多執行緒中,signal的作用是未定的。(the effects of signal() in a multithreaded process are unspecified)

可移植性問題:

* 只有將訊號的動作設定為sig_del或sig_ign時,signal函式才是可移植的。

*  當訊號發生時,到底是重置為sig_del,還是阻塞此訊號,在不同的系統上是不同的。因此要使用sigaction而不是signal。

理解signal函式

關鍵字 unix linux,signal,函式指標,指標函式 在unix linux中signal函式是比較複雜的乙個,其定義原型如下 void signal int signo,void func int int 這個函式中,最外層的函式體 void int 表明是乙個指標,指向乙個函式 的指標...

signal函式宣告的理解

先看函式原型 void signal int signo,void func int int 對於看慣了類似unsigned int sleep unsigned int seconds 這種宣告的人們來說,signal的宣告到底是個啥啊?signal是個函式,後面應該是形參啊,但為什麼形參後面又來...

訊號的設定 signal函式

訊號處理方式的主要方法有倆種 一種是使用簡單的signal函式,另一種是sigaction函式一 signal函式 使用signal 函式時,只需要指定訊號型別和訊號處理函式即可。標頭檔案 include 函式原型 typedef void sighandler t int sighandler t...