免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 7162 | 回复: 24

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

论坛徽章:
0
发表于 2005-11-23 15:49 |显示全部楼层
实在想不出有什么办法呀

论坛徽章:
0
发表于 2005-11-23 15:50 |显示全部楼层
什么叫空洞?

论坛徽章:
0
发表于 2005-11-23 17:10 |显示全部楼层
stat确定文件尺寸。
分配足够空间,读入。

论坛徽章:
0
发表于 2005-11-23 17:59 |显示全部楼层
贴段写带空洞文件的代码~  希望有帮助
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include"ourhdr.h"

char buf1[]="abcdefghij";
char buf2[]="ABCDEFGHIJ";

int
main(void)
{
  int fd;
  if((fd=creat("file.hole",FILE_MODE))<0)
    err_sys("creat error");
  if(write(fd,buf1,10)!=10)
    err_sys("buf1 write error");
  /* offset now=10 */
  if(lseek(fd,40,SEEK_SET)==-1)
    err_sys("lseek error");
  /* offset now=40 */
  if(write(fd,buf2,10)!=10)
    err_sys("buf2 write error");
  /* offset now=50*/
  exit(0);
}

论坛徽章:
0
发表于 2005-11-23 18:09 |显示全部楼层

回复 4楼 cmh_2003 的帖子

谢谢楼上两位
用stat读的大小,包含了空洞的大小, 而我复制时想去掉空洞部分,怎样做才能跳过空洞??

论坛徽章:
0
发表于 2005-11-23 19:51 |显示全部楼层
空洞不占用磁盘空间,只是打开文件时在内核用一个值为0的数据结构表示

论坛徽章:
0
发表于 2007-02-01 14:02 |显示全部楼层
大家好,我遇到同样问题,怎么判断文件的某部分是空洞?
或者说复制的时候,我不想复制空洞的那部分0,怎么处理?
我还需要copy之后保留空洞的地方, 用lseek实现?
谢谢

[ 本帖最后由 anhk 于 2007-2-1 14:33 编辑 ]

论坛徽章:
0
发表于 2007-02-01 14:38 |显示全部楼层
这应该称作sparse file(稀疏文件),对稀疏文件的判断只能是大致的方法。
stat除了看到size外,还可以看到占用的磁盘block数,假如一个block是4K字节,
block数乘以4k得到的结果远小于文件size,大致可以认为是sparse file。

正常来说看到连续的一大堆0可认为是sparse, Linux下的cp命令有参数
--sparse=WHEN
              control creation of sparse files
有兴趣可以看cp的source code

论坛徽章:
0
发表于 2007-02-01 15:37 |显示全部楼层
原帖由 caijimin 于 2007-2-1 14:38 发表
这应该称作sparse file(稀疏文件),对稀疏文件的判断只能是大致的方法。
stat除了看到size外,还可以看到占用的磁盘block数,假如一个block是4K字节,
block数乘以4k得到的结果远小于文件size,大致可以认为是 ...


谢谢,我去看看CP的代码,请问cp的代码是不是在glibc里边?

[ 本帖最后由 anhk 于 2007-2-1 15:51 编辑 ]

论坛徽章:
0
发表于 2007-02-01 15:55 |显示全部楼层
找到了,是在coreutils里边
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

ITPUB技术栈

ITPUB技术栈:http://z.itpub.net/
ITPUB技术栈是由ITPUB社区打造的垂直于IT领域的知识交流平台,在这里,你既可以是创作者也可以是消费者。如果你的IT生涯丰富多彩,喷薄的个人价值尽可在小栈内体现;如果你渴望找到志同道合的伙伴,拓宽人脉,小栈会是你最好的选择。





点击进入>>
  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP