⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sighold.c

📁 操作系统SunOS 4.1.3版本的源码
💻 C
字号:
#if !defined(lint) && defined(SCCSIDS)static char sccsid[] = "@(#)sighold.c 1.1 92/07/30 SMI";#endif/* * Copyright (c) 1987 Sun Microsystems, Inc.  */#include <errno.h>#include <sys/signal.h>intsighold(sig)	int sig;{	if (sig == SIGKILL) {		errno = EINVAL;		return (-1);	/* sigblock quietly disallows SIGKILL */	}	(void) sigblock(sigmask(sig));	return (0);		/* SVID specifies 0 return on success */}intsigrelse(sig)	int sig;{	if (sig == SIGKILL) {		errno = EINVAL;		return (-1);	/* sigsetmask quietly disallows SIGKILL */	}	(void) sigsetmask(sigblock(0) & ~sigmask(sig));	return (0);		/* SVID specifies 0 return on success */}intsigignore(sig)	int sig;{	struct sigvec vec;	if (sig == SIGKILL) {		errno = EINVAL;		return (-1);	/* sigsetmask quietly disallows SIGKILL */	}	if (sigvec(sig, (struct sigvec *)0, &vec) < 0)		return (-1);	vec.sv_handler = SIG_IGN;	if (sigvec(sig, &vec, (struct sigvec *)0) < 0)		return (-1);	(void) sigsetmask(sigblock(0) & ~sigmask(sig));	return (0);		/* SVID specifies 0 return on success */}void (*sigset(sig, func))()	int sig;	void (*func)();{	struct sigvec newvec;	int newmask;	struct sigvec oldvec;	int oldmask;	if (sigvec(sig, (struct sigvec *)0, &oldvec) < 0)		return (SIG_ERR);	oldmask = sigblock(0);	newvec = oldvec;	newvec.sv_flags |= SV_INTERRUPT;	newvec.sv_flags &= ~SV_RESETHAND;	newvec.sv_mask = 0;	newmask = oldmask;	if (func == SIG_HOLD) {		/*		 * Signal will be held.  Set the bit for that		 * signal in the signal mask.  Leave the action		 * alone.		 */		newmask |= sigmask(sig);	} else {		/*		 * Signal will not be held.  Clear the bit		 * for it in the signal mask.  Set the action		 * for it.		 */		newmask &= ~sigmask(sig);		newvec.sv_handler = func;	}	if (sigvec(sig, &newvec, (struct sigvec *)0) < 0)		return (SIG_ERR);	if (sigsetmask(newmask) < 0)		return (SIG_ERR);	if (oldmask & sigmask(sig))		return (SIG_HOLD);      /* signal was held */	else		return (oldvec.sv_handler);}

⌨️ 快捷键说明

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