- 论坛徽章:
- 0
|
原帖由 langue 于 2007-2-1 18:47 发表
搜索一下 oldcp.c
--
oldcp.c
- main(argc,argv)
- char **argv;
- {
- char buf[512];
- int fold, fnew, n;
- char *p1, *p2, *bp;
- int mode;
- if(argc != 3) {
- write(1,"Usage: cp oldfile newfile\n",26);
- exit();
- }
- if((fold = open(argv[1],0)) < 0){
- write(1,"Cannot open old file.\n",22);
- exit();
- }
- fstat(fold,buf);
- mode = buf[2] & 037;
- if((fnew = creat(argv[2],mode)) < 0){
- stat(argv[2], buf);
- if((buf[3] & 0100) != 0){
- p1 = argv[1] - 1;
- p2 = argv[2] - 1;
- bp = buf - 1;
- while(*++bp = *++p2);
- *bp = '/';
- p2 = bp;
- while(*++bp = *++p1)
- if(*bp == '/')
- bp = p2;
- if((fnew = creat(buf,mode)) < 0){
- write(1,"Cannot creat new file.\n",23);
- exit();
- }
- }else{
- write(1,"Cannot creat new file.\n",23);
- exit();
- }
- }
- while(n = read(fold, buf, 512))
- if(n < 0){
- write(1,"Read error\n",11);
- exit();
- }else
- if(write(fnew,buf,n) != n){
- write(1,"Write error.\n",13);
- exit();
- }
- fstat(fnew,buf);
- exit();
- }
复制代码
没有看到对空洞文件的处理 |
|