Chinaunix首页 | 论坛 | 博客
  • 博客访问: 456760
  • 博文数量: 64
  • 博客积分: 3271
  • 博客等级: 中校
  • 技术积分: 727
  • 用 户 组: 普通用户
  • 注册时间: 2009-07-30 18:42
文章分类

全部博文(64)

文章存档

2013年(1)

2011年(19)

2010年(42)

2009年(2)

分类: LINUX

2009-11-03 23:30:35

先扯两个定义;

信号:向进程发送的软件通知,通知进程有事件发生。已经生成没有传递的信号称挂起(pending)的信号。如果传递信号时进程执行了信号处理程序,则称进程捕捉到了信号。

信号掩码:信号掩码包含了一个当前被阻塞(blocked)的列表。当进程解除对这个信号的阻塞时,信号就会被传递出去。可以通过调用sigprocmask来改变进程的信号掩码。

/* Clear all signals from SET. */
extern int sigemptyset (sigset_t *__set) __THROW __nonnull ((1));

/* Set all signals in SET. */
extern int sigfillset (sigset_t *__set) __THROW __nonnull ((1));

/* Add SIGNO to SET. */
extern int sigaddset (sigset_t *__set, int __signo) __THROW __nonnull ((1));

/* Remove SIGNO from SET. */
extern int sigdelset (sigset_t *__set, int __signo) __THROW __nonnull ((1));

/* Return 1 if SIGNO is in SET, 0 if not. */
extern int sigismember (__const sigset_t *__set, int __signo)
     __THROW __nonnull ((1));

成功则返回0,否则-1,并且设置errno;

/* A `sigset_t' has a bit for each signal. */

# define _SIGSET_NWORDS    (1024 / (8 * sizeof (unsigned long int)))
typedef struct
  {
    unsigned long int __val[_SIGSET_NWORDS];
  } __sigset_t;


int sigprocmask (int __how, __const sigset_t *__restrict __set,
            sigset_t *__restrict __oset) __THROW;

__how:

/* Values for the HOW argument to `sigprocmask'. */
#define    SIG_BLOCK 0         /* Block signals. */
#define    SIG_UNBLOCK 1         /* Unblock signals. */
#define    SIG_SETMASK 2         /* Set the set of blocked signals. */

等待信号:

pause(),sigsuspend(),sigwait();

pause()简单。

sigsuspend()麻烦了

sigwait():

/* Select any of pending signals from SET or wait for any to arrive.

This function is a cancellation point and therefore not marked with
__THROW. */

int sigwait (__const sigset_t *__restrict __set, int *__restrict __sig)

前一个是要等待的信号的集合。后一个是等到的信号个数。sigwait函数一直阻塞到__set指定的任何一个信号挂起为止,然后从挂起的信号集中删除那个信号,并解除对它的阻塞。当sigwait返回时,从挂起的信号集中删除的信号个数在__sig中。
阅读(1513) | 评论(0) | 转发(0) |
0

上一篇:Linux信号之发送接收

下一篇:conntrack 笔记

给主人留下些什么吧!~~