sigaddset ()-向信号掩码添加信号

标准

标准/扩展 C 或 C++ 依赖关系
POSIX.1
XPG4
XPG4.2
单一 UNIX 规范版本 3
两个  

格式

#define _POSIX_SOURCE
#include <signal.h>

int sigaddset(sigset_t *set, int signal);

一般描述

将信号添加到 set中已记录的信号集。

sigaddset () 是操纵信号集的一系列函数的一部分。 信号集 是允许进程跟踪信号组的数据对象。 例如,一个进程可以创建一个信号集来记录它阻塞的信号,另一个信号集来记录哪些信号处于暂挂状态。 通常,信号集用于操纵由其他函数 (如 sigprocmask ()) 使用的信号组或检查由其他函数 (如 sigpending ()) 返回的信号集。

在对 sigset_t 类型的每个对象进行任何其他使用之前,应用程序应至少对该对象调用一次 sigemptyset () 或 sigfillset ()。 如果此类对象未以此方式初始化,但仍作为参数提供给 pthread_sigmask () , sigaction () , sigaddset () , sigdelset () , sigismember () , sigpending () , sigprocmask () , sigsuspend () , sigtimedwait () , sigwait () 或 sigwaitinfo () 中的任何一个,那么结果未定义。

用法说明

此功能不支持使用 SIGTHSTOPSIGTHCONT 信号。

返回值

如果将信号成功添加到信号集,那么 sigaddset () 返回 0。

如果不支持信号 ,则 sigaddset() 返回 -1 并将 errno 设为 EINVAL。

示例

CELEBS15
/* CELEBS15

   This example adds a set of signals.

 */
#define _POSIX_SOURCE
#include <stdio.h>
#include <signal.h>
#include <unistd.h>

void catcher(int signum) {
  puts("catcher() has gained control");
}

main() {
  struct   sigaction sact;
  sigset_t sigset;

  sigemptyset(&sact.sa_mask);
  sact.sa_flags = 0;
  sact.sa_handler = catcher;
  sigaction(SIGUSR1, &sact, NULL);

  puts("before first kill()");
  kill(getpid(), SIGUSR1);
  puts("before second kill()");

  sigemptyset(&sigset);
  sigaddset(&sigset, SIGUSR1);
  sigprocmask(SIG_SETMASK, &sigset, NULL);

  kill(getpid(), SIGUSR1);
  puts("after second kill()");
}
output
before first kill()
catcher() has gained control
before second kill()
after second kill()

相关信息