// 信号集问题 #define _XOPEN_SOURCE 700 #include #include // #include // 定义一个宏,用于检查信号编号是否有效 #define _NSIG 64 #define NSIG _NSIG #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); /* 将对应位设置为1 */ return (0); // 返回成功 } // 从信号集中删除一个信号 int sigdelset(sigset_t *set, int signo) { // 检查信号编号是否有效 if (SIGBAD(signo)) { errno = EINVAL; // 设置错误码为无效参数 return (-1); // 返回错误 } *set &= ~(1 << (signo - 1)); /* 将对应位设置为0 */ return (0); // 返回成功 } // 检查一个信号是否在信号集中 int sigismember(const sigset_t *set, int signo) { // 检查信号编号是否有效 if (SIGBAD(signo)) { errno = EINVAL; // 设置错误码为无效参数 return (-1); // 返回错误 } return ((*set & (1 << (signo - 1))) != 0); // 返回信号是否在信号集中 }