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

📄 fault.c

📁 unix v7是最后一个广泛发布的研究型UNIX版本
💻 C
字号:
#/* * UNIX shell * * S. R. Bourne * Bell Telephone Laboratories * */#include	"defs.h"STRING		trapcom[MAXTRAP];BOOL		trapflg[MAXTRAP];/* ========	fault handling routines	   ======== */VOID	fault(sig)	REG INT		sig;{	REG INT		flag;	signal(sig,fault);	IF sig==MEMF	THEN	IF setbrk(brkincr) == -1		THEN	error(nospace);		FI	ELIF sig==ALARM	THEN	IF flags&waiting		THEN	done();		FI	ELSE	flag = (trapcom[sig] ? TRAPSET : SIGSET);		trapnote |= flag;		trapflg[sig] |= flag;	FI}stdsigs(){	ignsig(QUIT);	getsig(INTR);	getsig(MEMF);	getsig(ALARM);}ignsig(n){	REG INT		s, i;	IF (s=signal(i=n,1)&01)==0	THEN	trapflg[i] |= SIGMOD;	FI	return(s);}getsig(n){	REG INT		i;	IF trapflg[i=n]&SIGMOD ORF ignsig(i)==0	THEN	signal(i,fault);	FI}oldsigs(){	REG INT		i;	REG STRING	t;	i=MAXTRAP;	WHILE i--	DO  t=trapcom[i];	    IF t==0 ORF *t	    THEN clrsig(i);	    FI	    trapflg[i]=0;	OD	trapnote=0;}clrsig(i)	INT		i;{	free(trapcom[i]); trapcom[i]=0;	IF trapflg[i]&SIGMOD	THEN	signal(i,fault);		trapflg[i] &= ~SIGMOD;	FI}chktrap(){	/* check for traps */	REG INT		i=MAXTRAP;	REG STRING	t;	trapnote &= ~TRAPSET;	WHILE --i	DO IF trapflg[i]&TRAPSET	   THEN trapflg[i] &= ~TRAPSET;		IF t=trapcom[i]		THEN	INT	savxit=exitval;			execexp(t,0);			exitval=savxit; exitset();		FI	   FI	OD}

⌨️ 快捷键说明

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