免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-11-23 15:49 |只看该作者 |倒序浏览
实在想不出有什么办法呀

论坛徽章:
0
2 [报告]
发表于 2005-11-23 15:50 |只看该作者
什么叫空洞?

论坛徽章:
0
3 [报告]
发表于 2005-11-23 17:10 |只看该作者
stat确定文件尺寸。
分配足够空间,读入。

论坛徽章:
0
4 [报告]
发表于 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
5 [报告]
发表于 2005-11-23 18:09 |只看该作者

回复 4楼 cmh_2003 的帖子

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

论坛徽章:
0
6 [报告]
发表于 2005-11-23 19:51 |只看该作者
空洞不占用磁盘空间,只是打开文件时在内核用一个值为0的数据结构表示

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

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

论坛徽章:
0
8 [报告]
发表于 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
9 [报告]
发表于 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
10 [报告]
发表于 2007-02-01 15:55 |只看该作者
找到了,是在coreutils里边
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP