📄 sigvec.c
字号:
#if !defined(lint) && defined(SCCSIDS)static char sccsid[] = "@(#)sigvec.c 1.1 92/07/30";#endif/* * Copyright (c) 1983 by Sun Microsystems, Inc. */#include <signal.h>#include <syscall.h>#include <errno.h>void (*_sigfunc[NSIG])();extern void _sigtramp();extern int errno;sigvec(sig, vec, ovec) int sig; register struct sigvec *vec, *ovec;{ struct sigvec avec; register void (*osig)(), (*nsig)(); register int omask, saved_errno; if (sig <= 0 || sig >= NSIG) { errno = EINVAL; return (-1); } omask = sigblock(sigmask(sig)); osig = _sigfunc[sig]; if (_sigvec(sig, vec, ovec) < 0) goto error; if (vec) { avec = *vec; vec = &avec; if ((nsig = vec->sv_handler) != SIG_DFL && nsig != SIG_IGN) { _sigfunc[sig] = nsig; vec->sv_handler = _sigtramp; } if (_sigvec(sig, vec, (struct sigvec *)0) < 0) goto error; } if (ovec && ovec->sv_handler == _sigtramp) ovec->sv_handler = osig; (void)sigsetmask(omask); return (0);error: saved_errno = errno; (void)sigsetmask(omask); _sigfunc[sig] = osig; errno = saved_errno; return (-1);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -