uurecover.c
来自「unix v7是最后一个广泛发布的研究型UNIX版本」· C语言 代码 · 共 71 行
C
71 行
#include <stdio.h>#include <a.out.h>#include <param.h>#include <proc.h>#include <sys/stat.h>struct stat xstat;struct proc mproc[NPROC];struct nlist nl[]{ { "_proc"}, { ""},};int err;main(argc,argv) char **argv;{ int i,j; if(argc<=1) exit(0); for(i=1;i<argc;i++) { if((j=isalock(argv[i]))>0) if(isapid(j)) { fprintf(stderr,"recovery: %s in use\n",argv[i]); err=1; } else unlink(argv[i]); else fprintf(stderr,"reocvery: %s not a lock\n",argv[i]); } exit(err);}isalock(s) char *s;{ int pid,fd; if(stat(s,&xstat)<0) return(0); if(xstat.st_size!=2) return(0); fd=open(s,0); if(fd<0) return(-1); read(fd,&pid,2); close(fd); return(pid);}int gotpids,pids[NPROC];isapid(n){ int i; if(gotpids==0) getpids(); for(i=0;i<NPROC;i++) if(n==pids[i]) return(1); return(0);}getpids(){ int i,mem; nlist("/unix",nl); if(nl[0].n_type==0) { fprintf(stderr,"no namelist, no lock recovery\n"); exit(1); } mem=open("/dev/mem",0); lseek(mem,(long)nl[0].n_value,0); read(mem,mproc,sizeof(mproc)); if(mproc[0].p_pid != 0) { fprintf(stderr,"/unix not loaded, no lock recovery\n"); exit(1); } for(i=0;i<NPROC;i++) { if(mproc[i].p_stat==0 || mproc[i].p_stat==SZOMB) pids[i]=0; else pids[i]=mproc[i].p_pid; } gotpids=1;}unlock(s) char *s;{ unlink(s);}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?