我的C筆記

來源:互聯網
上載者:User

標籤:style   blog   http   color   使用   strong   

是我自己的筆記,亂七八糟的。

 

文法:如果參數為const型,僅表示該參數在此函數的實現中不能被修改,不代表傳入的參數類型一定是const型

int sigsuspend(const sigset_t *sigmask);

程式碼片段:

sigset_t zeromask;sigemptyset(&zeromask);sigsuspend(&zeromask);

 

signal繼承問題:子進程會繼承父進程的signal mask 測試地址:http://blog.chinaunix.net/uid-29100821-id-4018170.html

理論說明:http://blog.csdn.net/lihuibo128/article/details/8556669

 

unix的讀寫函數:open,write,read

說明:http://www.cnblogs.com/Pierre-de-Ronsard/archive/2012/07/09/2582417.html

 

實驗1:訊號屏蔽字

1,構造一個進程:進程設定對某個訊號的處理函數,類比該訊號處理,檢驗是否如預期

2,構造一個進程:進程設定對某個訊號的處理函數,用sigprocmask設定,該進程對這一訊號屏蔽,類比該訊號,檢查是否如預期,使用其它訊號,檢查是否如預期

就能夠知道sigprocmask函數的功能。

sigpromask:用來設定進程的訊號屏蔽,哪些訊號不被進程所響應,及時設定了signal的訊號handler

實驗1擴充知識

與訊號集合相關的一組操作是:

標頭檔#include <signal.h>sigemptyset(sigset_t *set)初始化由set指定的訊號集,訊號集裡面的所有訊號被清空;sigfillset(sigset_t *set)調用該函數後,set指向的訊號集中將包含linux支援的64種訊號;sigaddset(sigset_t *set, int signum)在set指向的訊號集中加入signum訊號;sigdelset(sigset_t *set, int signum)在set指向的訊號集中刪除signum訊號;sigismember(const sigset_t *set, int signum)判定訊號signum是否在set指向的訊號集中。int sigaction( int sig, const struct sigaction *act,struct sigaction *oact )檢查、修改和指定訊號相關聯的訊號響應。 實驗1擴充知識int sigprocmask(int how, const sigset_t *restrict set, sigset_t *restrict oldset);參數how如果為SIG_BLOCK,該函數會將第二個參數的訊號屏蔽集合附加到之前的訊號屏蔽集合中如果為SIG_UNBLOCK,該函數會設定新的訊號屏蔽集合為(原先的mask和第二個參數set的補集)的交集。如果為SIG_SETMASK,該函數會清除原先的訊號屏蔽集合,設定第二個參數的訊號屏蔽集合為新的訊號屏蔽集合 實驗2:測試先屏蔽某個訊號,再允許響應 該訊號(只產生一次該訊號)
int main(){    sigset_t sigset, oldmask;            signal(SIGUSR1, proc_usr1);    sigprocmask(0, NULL, &oldmask);    sigaddset(&sigset, SIGUSR1);     sigprocmask(SIG_BLOCK, &sigset, NULL);    pr_mask("Block SIGUSR1");    sleep(12);    sigprocmask(SIG_SETMASK, &oldmask, NULL);//設定新的屏蔽字為oldmask
//sigprocmask(SIG_UNBLOCK, &sigset, NULL);//清除設定的屏蔽字 pr_mask("Unblock SIGUSR1"); sleep(12); return 0;}

運行,產生一次SIGUSR1訊號

輸出:

Block SIGUSR1:SIGUSR1 proc_usr1Unblock SIGUSR1:

  

sigpending(sigset_t *set):取得當前進程的訊號屏蔽字個人理解,該函數和sigprocmask(0, NULL, sigset_t *set)功能一樣 sigsuspend();
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.