免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123
最近访问板块 发新帖
楼主: redog
打印 上一主题 下一主题

文件复制时如何处理文件中的空洞(holes)?? [复制链接]

论坛徽章:
0
21 [报告]
发表于 2007-02-01 18:47 |只看该作者
原帖由 assiss 于 2005-11-23 15:50 发表
什么叫空洞?


我觉得应该问楼主,什么叫 “处理文件中的空洞”

论坛徽章:
0
22 [报告]
发表于 2007-02-01 18:47 |只看该作者
原帖由 lonelyair 于 2007-2-1 17:00 发表

哪里有CP的source code?


搜索一下 oldcp.c

--

论坛徽章:
0
23 [报告]
发表于 2007-02-01 22:57 |只看该作者
无法精确判断。
cp的处理就是最合理的方法。

论坛徽章:
0
24 [报告]
发表于 2007-02-02 09:01 |只看该作者
是这样的,我这里监控一些文件,但是不知道文件是否完整,我想根据是否有空洞来查看,或者看有没有其他的办法。

论坛徽章:
0
25 [报告]
发表于 2007-02-02 10:30 |只看该作者
原帖由 langue 于 2007-2-1 18:47 发表


搜索一下 oldcp.c

--


oldcp.c

  1. main(argc,argv)
  2. char **argv;
  3. {
  4. char buf[512];
  5. int fold, fnew, n;
  6. char *p1, *p2, *bp;
  7. int mode;
  8.         if(argc != 3) {
  9.                 write(1,"Usage: cp oldfile newfile\n",26);
  10.                 exit();
  11.         }
  12.         if((fold = open(argv[1],0)) < 0){
  13.                 write(1,"Cannot open old file.\n",22);
  14.                 exit();
  15.         }
  16.         fstat(fold,buf);
  17.         mode = buf[2] & 037;
  18.         if((fnew = creat(argv[2],mode)) < 0){
  19.                 stat(argv[2], buf);
  20.                 if((buf[3] & 0100) != 0){
  21.                         p1 = argv[1] - 1;
  22.                         p2 = argv[2] - 1;
  23.                         bp = buf - 1;
  24.                         while(*++bp = *++p2);
  25.                         *bp = '/';
  26.                         p2 = bp;
  27.                         while(*++bp = *++p1)
  28.                                 if(*bp == '/')
  29.                                         bp = p2;
  30.                         if((fnew = creat(buf,mode)) < 0){
  31.                                 write(1,"Cannot creat new file.\n",23);
  32.                                 exit();
  33.                         }
  34.                 }else{
  35.                 write(1,"Cannot creat new file.\n",23);
  36.                 exit();
  37.                 }
  38.         }
  39.         while(n = read(fold, buf, 512))
  40.         if(n < 0){
  41.                 write(1,"Read error\n",11);
  42.                 exit();
  43.         }else
  44.                 if(write(fnew,buf,n) != n){
  45.                         write(1,"Write error.\n",13);
  46.                         exit();
  47.                 }
  48.         fstat(fnew,buf);
  49.         exit();
  50. }

复制代码

没有看到对空洞文件的处理
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP