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

📄 cp.c

📁 unix v7是最后一个广泛发布的研究型UNIX版本
💻 C
字号:
/* * cp oldfile newfile */#define	BSIZE	512#include <stdio.h>#include <sys/types.h>#include <sys/stat.h>struct	stat	stbuf1, stbuf2;char	iobuf[BSIZE];main(argc, argv)char *argv[];{	register i, r;	if (argc < 3) 		goto usage;	if (argc > 3) {		if (stat(argv[argc-1], &stbuf2) < 0)			goto usage;		if ((stbuf2.st_mode&S_IFMT) != S_IFDIR) 			goto usage;	}	r = 0;	for(i=1; i<argc-1;i++)		r |= copy(argv[i], argv[argc-1]);	exit(r);usage:	fprintf(stderr, "Usage: cp: f1 f2; or cp f1 ... fn d2\n");	exit(1);}copy(from, to)char *from, *to;{	int fold, fnew, n;	register char *p1, *p2, *bp;	int mode;	if ((fold = open(from, 0)) < 0) {		fprintf(stderr, "cp: cannot open %s\n", from);		return(1);	}	fstat(fold, &stbuf1);	mode = stbuf1.st_mode;	/* is target a directory? */	if (stat(to, &stbuf2) >=0 &&	   (stbuf2.st_mode&S_IFMT) == S_IFDIR) {		p1 = from;		p2 = to;		bp = iobuf;		while(*bp++ = *p2++)			;		bp[-1] = '/';		p2 = bp;		while(*bp = *p1++)			if (*bp++ == '/')				bp = p2;		to = iobuf;	}	if (stat(to, &stbuf2) >= 0) {		if (stbuf1.st_dev == stbuf2.st_dev &&		   stbuf1.st_ino == stbuf2.st_ino) {			fprintf(stderr, "cp: cannot copy file to itself.\n");			return(1);		}	}	if ((fnew = creat(to, mode)) < 0) {		fprintf(stderr, "cp: cannot create %s\n", to);		close(fold);		return(1);	}	while(n = read(fold,  iobuf,  BSIZE)) {		if (n < 0) {			fprintf(stderr, "cp: read error\n");			close(fold);			close(fnew);			return(1);		} else			if (write(fnew, iobuf, n) != n) {				fprintf(stderr, "cp: write error.\n");				close(fold);				close(fnew);				return(1);			}	}	close(fold);	close(fnew);	return(0);}

⌨️ 快捷键说明

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