Chinaunix首页 | 论坛 | 博客
  • 博客访问: 154641
  • 博文数量: 27
  • 博客积分: 710
  • 博客等级: 上士
  • 技术积分: 305
  • 用 户 组: 普通用户
  • 注册时间: 2010-10-03 20:08
文章分类

全部博文(27)

文章存档

2012年(1)

2011年(22)

2010年(4)

我的朋友

分类: LINUX

2011-10-11 09:16:03

POSIX.1定义了数据类型sigset_t以包含一个信号集

  1. #include<signal.h>

  2. int sigemptyset(sigset_t *set);

  3. int sigfillset(sigset_t *set);

  4. int sigaddset(sigset_t *set,int signo);

  5. int sigdelset(sigset_t *set,int signo);

  6.          All four return:0 if OK,-1 on error

  7. int sigismember(const sigset_t *set,int signo);

  8.          Return:1 if true,0 if false,-1 on error
The function sigemptyset initializes the signal set pointed to by set so that all signals are excluded.
The function
sigfillset initializes the signal set so that all signals are included.

NOTE: All applications have to call either sigemptyset or sigfillset once for each signal set,before using the signal set.

The function
sigaddset adds a single signal to an existing set,and sigdelset removes a single signal from a set .

程序清单:


  1. #include <signal.h>
  2. #include <errno.h>
  3. #define SIGBAD(signo)  ((signo <= 0 || (signo >=NSIG)))

  4. int sigaddset(sigset_t *set,int signo)
  5. {
  6.     if(SIGBAD(signo)) { errno = EINVAL;return -1; }
  7.     //将指定的信号位置为1
  8.     *set |= 1 << (signo -1);
  9.     return 0;
  10. }


  11. int sigdelset(sigset_t *set,int signo)
  12. {
  13.     if(SIGBAD(signo)) { errno = EINVAL;return -1; }
     //将指定的信号位置为0
  1.     *set &= ~( 1 << (signo -1) );
  2.     return 0;
  3. }

  4. int sigismember(const sigset_t *set,int signo)
  5. {
  6.     if(SIGBAD(signo)) { errno = EINVAL;return -1; }
  7.   
  8.     return ((*set & (1 << (signo -1))) !=0 );
  9. }
这里涉及到移位操作和位操作,复习一下。
(1)左移位操作符为<<,右移位操作符为>>。左操作数的值将移动由右操作数指定的位数,两个操作数都必须是整型类型。
(2)value = value | 1 << bit_number  
(3)value = value &~( 1 << bit_number)
注:bit_number为一整型值,它的范围是从0至整型值的位数减1。(2)实现把指定的置位1,(3)实现把指定的置位0。



阅读(1230) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~