_sigset.c

来自「操作系统源代码」· C语言 代码 · 共 76 行

C
76
字号
#include <lib.h>/* XXX - these have to be hidden because signal() uses them and signal() is * ANSI and not POSIX.  It would be surely be better to use macros for the * library and system uses, and perhaps macros as well as functions for the * POSIX user interface.  The macros would not need underlines.  It may be * inconvenient to match the exact semantics of the current functions * because the interface is bloated by reporting errors.  For library and * system uses, the signal number is mostly already known to be valid * before the sigset-changing routines are called. */#define sigaddset	_sigaddset#define sigdelset	_sigdelset#define sigemptyset	_sigemptyset#define sigfillset	_sigfillset#define sigismember	_sigismember#include <signal.h>/* Low bit of signal masks. */#define SIGBIT_0	((sigset_t) 1)/* Mask of valid signals (0 - _NSIG).  Assume the shift doesn't overflow. */#define SIGMASK		((SIGBIT_0 << (_NSIG + 1)) - 1)#define sigisvalid(signo) ((unsigned) (signo) <= _NSIG)PUBLIC int sigaddset(set, signo)sigset_t *set;int signo;{  if (!sigisvalid(signo)) {  	errno = EINVAL;	return -1;  }  *set |= SIGBIT_0 << signo;  return 0;}PUBLIC int sigdelset(set, signo)sigset_t *set;int signo;{  if (!sigisvalid(signo)) {  	errno = EINVAL;	return -1;  }  *set &= ~(SIGBIT_0 << signo);  return 0;}PUBLIC int sigemptyset(set)sigset_t *set;{  *set = 0;  return 0;}PUBLIC int sigfillset(set)sigset_t *set;{  *set = SIGMASK;  return 0;}PUBLIC int sigismember(set, signo)sigset_t *set;int signo;{  if (!sigisvalid(signo)) {  	errno = EINVAL;	return -1;  }  if (*set & (SIGBIT_0 << signo))  	return 1;  return 0;}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?