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

📄 arcv.c

📁 unix v7是最后一个广泛发布的研究型UNIX版本
💻 C
字号:
/* * Convert old to new archive format*/#include <signal.h>#include <ar.h>#define	omag	0177555struct	ar_hdr nh;struct{	char	oname[8];	long	odate;	char	ouid;	char	omode;	unsigned siz;} oh;char	*tmp;char	*mktemp();int	f;int	tf;union {	char	buf[512];	int	magic;} b;main(argc, argv)char *argv[];{	register i;	tmp = mktemp("/tmp/arcXXXXX");	for(i=1; i<4; i++)		signal(i, SIG_IGN);	for(i=1; i<argc; i++)		conv(argv[i]);	unlink(tmp);}conv(fil)char *fil;{	register unsigned i, n;	f = open(fil, 2);	if(f < 0) {		printf("arcv: cannot open %s\n", fil);		return;	}	close(creat(tmp, 0600));	tf = open(tmp, 2);	if(tf < 0) {		printf("arcv: cannot open temp\n");		close(f);		return;	}	b.magic = 0;	read(f, (char *)&b.magic, sizeof(b.magic));	if(b.magic != omag) {		printf("arcv: %s not archive format\n", fil);		close(tf);		close(f);		return;	}	b.magic = ARMAG;	write(tf, (char *)&b.magic, sizeof(b.magic));loop:	i = read(f, (char *)&oh, sizeof(oh));	if(i != sizeof(oh))		goto out;	for(i=0; i<8; i++)		nh.ar_name[i] = oh.oname[i];	nh.ar_size = oh.siz;	nh.ar_uid = oh.ouid;	nh.ar_gid = 1;	nh.ar_mode = 0666;	nh.ar_date = oh.odate;	n = (oh.siz+1) & ~01;	write(tf, (char *)&nh, sizeof(nh));	while(n > 0) {		i = 512;		if(n < i)			i = n;		read(f, b.buf, i);		write(tf, b.buf, i);		n -= i;	}	goto loop;out:	lseek(f, 0L, 0);	lseek(tf, 0L, 0);	while((i=read(tf, b.buf, 512)) > 0)		write(f, b.buf, i);	close(f);	close(tf);}

⌨️ 快捷键说明

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