mmap实现大文件复制


  1. #include <sys/mman.h>
  2. #include <sys/types.h>
  3. #include <sys/stat.h>
  4. #include <fcntl.h>
  5. #include <stdlib.h>
  6. #include <assert.h>
  7. #include <string.h>
  8. #include <stdio.h>
  9. #define BUF_SIZE 4096
  10. int main(int argc,char *argv[])
  11. {
  12. int fd_r,fd_w;
  13. char * p_w,*p_r ;
  14. char buf[BUF_SIZE];
  15. int length_r,length_w,len = 0;
  16. int off= 0;
  17. assert(argc == 3);
  18. fd_r = open(argv[ 1],O_RDWR);
  19. assert(fd_r);
  20. fd_w = open(argv[ 2],O_RDWR|O_CREAT|O_TRUNC, 0644);
  21. assert(fd_w);
  22. length_r = lseek(fd_r, 0,SEEK_END);
  23. length_w = lseek(fd_w,length_r - 1,SEEK_CUR);
  24. write(fd_w, "0", 1);
  25. lseek(fd_w, 0,SEEK_SET);
  26. lseek(fd_r, 0,SEEK_SET);
  27. //assert(p_w);
  28. while( 1)
  29. {
  30. p_r = mmap( NULL,BUF_SIZE,PROT_READ|PROT_WRITE,MAP_SHARED,fd_r,off);
  31. p_w = mmap( NULL,BUF_SIZE,PROT_WRITE,MAP_SHARED,fd_w,off);
  32. memcpy(p_w,p_r,BUF_SIZE);
  33. off += BUF_SIZE;
  34. if((off+BUF_SIZE) >= length_r)
  35. {
  36. p_r = mmap( NULL,length_r - off ,PROT_READ|PROT_WRITE,MAP_SHARED,fd_r,off);
  37. p_w = mmap( NULL,length_r - off,PROT_WRITE,MAP_SHARED,fd_w,off);
  38. memcpy(p_w,p_r,length_r -off );
  39. munmap(p_r,length_r - off);
  40. munmap(p_w,length_r - off);
  41. break;
  42. }
  43. }
  44. close(fd_r);
  45. close(fd_w);
  46. return 0;
  47. }



from:https://blog.csdn.net/nocodelife/article/details/8647499


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值