unp signal函式與系統中斷

2021-08-02 11:03:33 字數 1969 閱讀 2533

一.signal分析

在posix中訊號的處理:

#include 

void (*signal(int signo, void (*func)(int)))(int)

else

if(sigaction(signo, &act, &oact)< 0) //struct sigaction;signo代表是要檢測或者修改具體訊號的動作編號。

return sig_err;

return oact.sa_handler;

}

1)一旦安裝了該訊號,他便會一直安裝著

2)在乙個訊號處理函式執行期間,正在被遞交的函式是堵塞的。而且,傳遞給函式sigaction中的第二個引數不為空的時候,假設第二個引數為struct sigaction act,那麼act.sa_mask訊號集中指定的任何額外訊號都會被堵塞。

3)如果乙個訊號在被堵塞期間產生了一次或者多次,那麼該訊號只提交一次(也就是unix訊號不排隊處理)。

4)我們可以利用sigprocmask函式選擇性地堵塞或解除一組訊號的堵塞0

具體例如如下:

該例子證明了posix訊號處理的第一條性質:1)一旦安裝了該訊號,他便會一直安裝著

二.系統中斷

低速系統調(慢系統)用(slow system call)該術語適用於那些可能永遠阻塞的系統呼叫。永遠阻塞的系統呼叫是指呼叫永遠無法返回,多數網路支援函式都屬於這一類。如:若沒有客戶連線到伺服器上,那麼伺服器的accept呼叫就會一直阻塞。慢系統呼叫可以被永久阻塞,包括以下幾個類別:(1)讀寫『慢』裝置(包括pipe,終端裝置,網路連線等)。讀時,資料不存在,需要等待;寫時,緩衝區滿或其他原因,需要等待。讀寫磁碟檔案一般不會阻塞。(2)當開啟某些特殊檔案時,需要等待某些條件,才能開啟。例如:開啟中斷裝置時,需要等到連線裝置的modem響應才能完成。(3)pause和wait函式。pause函式使呼叫程序睡眠,直到捕獲到乙個訊號。wait等待子程序終止。(4)某些ioctl操作。(5)某些ipc操作。

系統呼叫的定義:當乙個程序呼叫而堵塞的時候,由於捕獲到某個訊號,而中斷了該程序的系統呼叫,系統呼叫的函式返回出錯,errno = eintr

例子:第二段**的因為sigalrm中斷了系統呼叫scanf

修改方案1:如果在上訴程式中加入此**(act.sa_flags = sa_restart;),那麼就會出現被中斷的系統呼叫(scanf)將會重新被呼叫

該方案缺點:因為考慮所有**在不同系統上面的可移植性,該處理方案在不支援sa_restart系統上無效

在centos6.5系統上執行結果如下:

在《unix網路程式設計》這本書上面,5.9節將會還有對此系統中斷處理的例子

訊號與系統,系統函式的影響

1 系統函式的零極點對系統頻率特性有何影響?極點會使調節時間變短,是系統反應更快,但是也會百使系統的穩定性變差,零點一般是使得穩定性增加,但是會使調節時間變長 極點主要影響頻率響應的峰度值,極點愈靠近單位圓,峰值愈尖銳 零點主要影響頻率特性的谷值,零點愈靠近單位圓,谷值愈深 當零點在單位圓上時知,頻...

庫函式與系統呼叫

系統呼叫 通常shell是通過系統呼叫將底層硬體功能向上層應用程式提供,linux的系統呼叫約有300多個 因為系統呼叫不考慮平台差異性,由核心直接提供,因此移植性較差。庫函式庫函式是由使用者或組織自己開發的,具有一定功能的函式集合 例如,如果使用者要讓音效卡發生,可能要呼叫好多個系統呼叫,而且系統...

Z變換與系統函式

a z變換 英文 z transformation 可將時域訊號 即 離散時間序列 變換為在復頻域的表示式。它在離散時間訊號處理中的地位,如同拉普拉斯變換在連續時間訊號處理中的地位。離散時間訊號的z變換是分析線性時不變離散時間系統問題的重要工具,在數字訊號處理 計算機控制系統等領域有著廣泛的應用。b...