- 论坛徽章:
- 0
|
程序清单10-9 sigaddset, sigdelset和sigismember的实现
#include <signal.h>
#include <errno.h>
/* <signal.h> usually defines NSIG to include signal number 0 */ <signal.h>头文件通常定义NSIG来包含信号编号0?是这个意思吗?NSIG具体是等于多少呢?我查了<signal.h>也没查出个所以然来
#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 */ 这句是几乎不懂,大概是基础太差了,郁闷阿!!!为什么是signo-1?接着是1<<(signo-1)位移运算?然后是和信号集按位或吧?实在不明白为什么,希望前辈们可以详细解释一下,不胜感激啊!这句明白了,下面两句应该就没问题了 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 编辑 ] |
|