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 + -
显示快捷键?