进程(下),信号
This commit is contained in:
@@ -0,0 +1,48 @@
|
||||
// 信号集问题
|
||||
#define _XOPEN_SOURCE 700
|
||||
#include <signal.h>
|
||||
#include <errno.h>
|
||||
// #include <sigset.h>
|
||||
|
||||
// 定义一个宏,用于检查信号编号是否有效
|
||||
#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); // 返回信号是否在信号集中
|
||||
}
|
||||
Reference in New Issue
Block a user