sigwait函式詳解

2021-07-16 19:46:40 字數 938 閱讀 1589

int

sigwait

(const sigset_t

*restrict sigmask

,int

* restrict signo);

sigwait函式一直阻塞直到*sigmask指定的任何乙個訊號被掛起為止,然後從掛起訊號集中刪除那個訊號,並解除對它的阻塞。當sigwait返回時,從掛起訊號集中刪除的訊號的個數被儲存在signo指定的那個位置中。

訊號是向程序傳送的軟體通知,通知程序有事件發生。引發訊號的事件發生時,訊號就被生成了。程序根據訊號採取行動時,訊號就被傳遞了。訊號的壽命就是訊號的生成和傳遞之間的時間間隔。已經生成但還未被傳遞的訊號被稱為掛起的訊號。在訊號生成和訊號傳遞之間可能會有相當長的時間。

掛起就是未決pending(未處理的)

訊號類似於處理事務

1。有事情發生了(訊號產生)

2。該事情通知了有關部門,他們已登記在乙個未處理事件的本子上(訊號傳遞給目標程序,目標程序登記該訊號到本程序的task_struct結構)

3。有關部門定期檢查未處理事件的本子,發現有事情沒處理時,就登出該事件(目標程序會檢測是否有訊號等待處理,如果有未決訊號等待處理且該訊號沒有被程序阻塞,則在執行相應的訊號處理函式前,程序會把訊號在未決訊號鏈中占有的結構卸掉)

4。最後有關部門去實施事件的處理。(程序登出訊號後,立即執行相應的訊號處理函式,執行完畢後,訊號的本次傳送對程序的影響徹底結束。)

int sigwait(const sigset_t *restrict sigmask, int* restrict signo);

sigwait函式一直阻塞直到*sigmask指定的任何乙個訊號被掛起為止,然後從掛起訊號集中刪除那個訊號,並解除對它的阻塞。當sigwait返回時,從掛起訊號集中刪除的訊號的個數被儲存在signo指定的那個位置中。

這裡的sigwait是阻塞本程序,去等待指定的訊號。等到了就會解除阻塞。

sigsuspend函式和sigwait函式

include int sigsuspend const sigset t mask sigsuspend函式是等待某個訊號到達,然後呼叫處理函式之後才返回的,否則會處於阻塞等待狀態。unix環境高階程式設計的sleep函式就是通過alarm函式和sigsuspend函式來實現的。但是當我自己寫了乙...

mod函式詳解

我們知道,mod函式是乙個求餘函式,其格式為 mod nexp1,nexp2 即是兩個數值表示式作除法運算後的餘數。那麼 兩個同號整數求餘與你所知的兩個正數求餘完全一樣 即兩個負整數與兩個正整數的演算法一樣 一 兩個異號整數求餘 1.函式值符號規律 餘數的符號 mod 負,正 正 mod 正,負 負...

CDC PatBlt 函式詳解。

函式功能 該函式使用當前選入指定裝置環境中的刷子繪製給定的矩形區域。通過使用給出的光柵操作來對該刷子的顏色和表面顏色進行組合。函式原型 bool patblt hdc hdc,int nxleft,int nyleft,int nwidth,int nheight,dword dwrop 引數 hd...