我的C笔记
最近更新:
1,父進(jìn)程fork一個子進(jìn)程,當(dāng)向父進(jìn)程發(fā)送一個SIGINT或其它信號時,子進(jìn)程是否會接受到該信號?
2,父進(jìn)程調(diào)用system執(zhí)行一個程序時,向父進(jìn)程發(fā)送一個信號時,system運(yùn)行中的程序是否能夠接受到該信號?
3,當(dāng)父進(jìn)程正常執(zhí)行完畢后,會通知子進(jìn)程嗎?
?
是我自己的筆記,亂七八糟的。
?
語法:如果參數(shù)為const型,僅表示該參數(shù)在此函數(shù)的實(shí)現(xiàn)中不能被修改,不代表傳入的參數(shù)類型一定是const型
int?sigsuspend(const sigset_t *sigmask);
代碼片段:
sigset_t zeromask; sigemptyset(&zeromask); sigsuspend(&zeromask);?
signal繼承問題:子進(jìn)程會繼承父進(jìn)程的signal mask 測試地址:http://blog.chinaunix.net/uid-29100821-id-4018170.html
理論說明:http://blog.csdn.net/lihuibo128/article/details/8556669
?
unix的讀寫函數(shù):open,write,read
說明:http://www.cnblogs.com/Pierre-de-Ronsard/archive/2012/07/09/2582417.html
?
實(shí)驗(yàn)1:信號屏蔽字
1,構(gòu)造一個進(jìn)程:進(jìn)程設(shè)置對某個信號的處理函數(shù),模擬該信號處理,檢驗(yàn)是否如預(yù)期
2,構(gòu)造一個進(jìn)程:進(jìn)程設(shè)置對某個信號的處理函數(shù),用sigprocmask設(shè)置,該進(jìn)程對這一信號屏蔽,模擬該信號,檢查是否如預(yù)期,使用其它信號,檢查是否如預(yù)期
就能夠知道sigprocmask函數(shù)的功能。
sigpromask:用來設(shè)置進(jìn)程的信號屏蔽,哪些信號不被進(jìn)程所響應(yīng),及時設(shè)置了signal的信號handler
實(shí)驗(yàn)1擴(kuò)展知識
與信號集合相關(guān)的一組操作是:
頭文件 #include <signal.h> sigemptyset(sigset_t *set)初始化由set指定的信號集,信號集里面的所有信號被清空; sigfillset(sigset_t *set)調(diào)用該函數(shù)后,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 )檢查、修改和指定信號相關(guān)聯(lián)的信號響應(yīng)。 實(shí)驗(yàn)1擴(kuò)展知識 int sigprocmask(int how, const sigset_t *restrict set, sigset_t *restrict oldset); 參數(shù)how 如果為SIG_BLOCK,該函數(shù)會將第二個參數(shù)的信號屏蔽集合附加到之前的信號屏蔽集合中 如果為SIG_UNBLOCK,該函數(shù)會設(shè)置新的信號屏蔽集合為(原先的mask和第二個參數(shù)set的補(bǔ)集)的交集。 如果為SIG_SETMASK,該函數(shù)會清除原先的信號屏蔽集合,設(shè)置第二個參數(shù)的信號屏蔽集合為新的信號屏蔽集合 實(shí)驗(yàn)2:測試先屏蔽某個信號,再允許響應(yīng) 該信號(只產(chǎn)生一次該信號) 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);//設(shè)置新的屏蔽字為oldmask//sigprocmask(SIG_UNBLOCK, &sigset, NULL);//清除設(shè)置的屏蔽字pr_mask("Unblock SIGUSR1");sleep(12);return 0; }
運(yùn)行,產(chǎn)生一次SIGUSR1信號
輸出:
Block SIGUSR1:SIGUSR1 proc_usr1 Unblock SIGUSR1:??
sigpending(sigset_t *set):取得當(dāng)前進(jìn)程的信號屏蔽字 個人理解,該函數(shù)和sigprocmask(0, NULL, sigset_t *set)功能一樣 sigsuspend(); sigaction() http://blog.csdn.net/guoping16/article/details/6583957 http://blog.csdn.net/muge0913/article/details/7331129 http://www.cnblogs.com/wblyuyang/archive/2012/11/13/2768923.html http://baike.baidu.com/link?url=KDUzSG0_Xhuj2kawilAFXPkOQ5_qmogjSdintJYUFcTnyEMjq_M04ONmXePI95Ch轉(zhuǎn)載于:https://www.cnblogs.com/helww/p/3813638.html
總結(jié)
- 上一篇: [转载] 晓说——第9期:多如牛毛严酷无
- 下一篇: 《DSP using MATLAB》Pr