- 論壇徽章:
- 0
|
程序清單10-9 sigaddset, sigdelset和sigismember的實(shí)現(xiàn)
#include <signal.h>
#include <errno.h>
/* <signal.h> usually defines NSIG to include signal number 0 */ <signal.h>頭文件通常定義NSIG來包含信號(hào)編號(hào)0?是這個(gè)意思嗎?NSIG具體是等于多少呢?我查了<signal.h>也沒查出個(gè)所以然來
#define SIGBAD(signo) ((signo) <= 0 || (signo) >= NSIG)
int
sigaddset(sigset_t *set, int signo)
{
if(SIGBAD(signo)) { errno = EINVAL; return(-1); }
*set |= 1 << (signo-1) ; /* turn bit on */ 這句是幾乎不懂,大概是基礎(chǔ)太差了,郁悶阿!!!為什么是signo-1?接著是1<<(signo-1)位移運(yùn)算?然后是和信號(hào)集按位或吧?實(shí)在不明白為什么,希望前輩們可以詳細(xì)解釋一下,不勝感激啊!這句明白了,下面兩句應(yīng)該就沒問題了 return(0);
}
int
sigdelset(sigset_t *set, int signo)
{
if(SIGBAD(signo)) { errno = EINVAL; return(-1); }
set &= ~(1 <<(signo-1)); /*turn bit off*/
return(0);
}
int sigismember(const sigset_t *set, int signo)
{
if(SIGBAD(signo)) { errno = EINVAL; return(-1); }
return((*set & (1 << (signo-1))) != 0);
}
在此先謝謝大家的熱心幫忙!不勝感激!
[ 本帖最后由 李某人 于 2009-5-10 12:29 編輯 ] |
|