当前位置:  开发笔记 > 编程语言 > 正文

在sigprocmask()中设置和设置

如何解决《在sigprocmask()中设置和设置》经验,为你挑选了1个好方法。

我还没完全明白,怎么用sigprocmask().特别是,如何setoldset它的语法的工作和如何使用它们.

int sigprocmask(int how, const sigset_t *set, sigset_t *oldset);

请解释一个例子,阻止,说SIGUSR1几秒钟,然后解锁并处理它.



1> Nathan Fellm..:

这个想法是你提供一个掩码set,实际上是一个信号列表.该how论点说,你应该用面膜做什么set.

您可以使用SIG_BLOCK阻止set列表中的信号,也SIG_UNBLOCK可以取消阻止它们.这些都不会更改列表中未设置的信号. SIG_SETMASK阻止列表中的信号,并取消阻止列表中未设置的信号.

例如,假设旧的阻止列表是,{SIGSEGV, SIGSUSP}sigprocmask使用这些参数调用:

sigset_t x;
sigemptyset (&x);
sigaddset(&x, SIGUSR1);
sigprocmask(SIG_BLOCK, &x, NULL)

新阻止列表现在将是{SIGSEGV, SIGSUSP, SIGUSR1}.

如果您sigprocmask现在使用这些参数调用:

sigprocmask(SIG_UNBLOCK, &x, NULL)

新的阻止列表将重新出现{SIGSEGV, SIGSUSP}.

如果您sigprocmask现在使用这些参数调用:

sigprocmask(SIG_SETMASK, &x, NULL)

新阻止列表现在将设置为{SIGUSR1}.

oldset参数告诉您之前的阻止列表是什么.如果我们有这个声明:

sigset_t y;

我们在前面的例子中调用代码如下:

    sigprocmask(SIG_BLOCK, &x, &y)

现在我们有:

y == {SIGSEGV, SIGSUSP}

如果我们现在这样做:

    sigprocmask(SIG_UNBLOCK, &x, &y)

我们会得到的

y == {SIGSEGV, SIGSUSP, SIGUSR1}

如果我们这样做:

    sigprocmask(SIG_SET, &x, &y)

我们会得到这个:

y == {SIGSEGV, SIGSUSP}

因为这是阻塞集的先前值.

推荐阅读
牛尾巴2010
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有