📄 fault.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 + -