mmap复制文件

#include <sys/mman.h>

void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset);
int munmap(void *addr, size_t length);

mmap,存储映射,将文件映射到内存地址(指针),然后可以利用指针操作函数(如memcpy等)进行操作

例如用mmap复制文件:

//目的:利用mmap将fd1文件复制到fd2文件
//1-打开文件
//2-获取文件大小
//3-开辟fd2文件大小(在fd2文件的末尾写一个空字节)
//4-mmap映射fd1文件
//5-mmap映射fd2文件
//6-关掉fd1, fd2
//7-用memcpy将fd1拷贝到fd2中
//9-munmap

//代码如下:

 1 #include <stdio.h>
 2 #include <errno.h>
 3 #include <stdlib.h>
 4 #include <string.h>
 5 #include <unistd.h>
 6 #include <sys/mman.h>
 7 #include <sys/types.h>
 8 #include <sys/stat.h>
 9 #include <fcntl.h>
10 
11 int main(void)
12 {    
13     int fd1 = open("1.txt", O_RDONLY);
14     int fd2 = open("2.txt", O_RDWR|O_CREAT, ~0);
15 
16     struct stat fd_st;
17     fstat(fd1, &fd_st);
18 
19     printf("size=%d\n", fd_st.st_size);
20 
21     lseek(fd2, fd_st.st_size-1, 0);
22     write(fd2, "", 1);
23     void *src = mmap(NULL, fd_st.st_size, PROT_READ, MAP_SHARED, fd1, 0);
24     void *dst = mmap(NULL, fd_st.st_size, PROT_READ|PROT_WRITE, MAP_SHARED, fd2, 0);
25 
26     if (src==MAP_FAILED || dst==MAP_FAILED)
27         printf("errmsg=%s\n", strerror(errno));
28 
29     close(fd1);
30 
31 close(fd2);
32 
33     memcpy(dst, src, fd_st.st_size);
34 
35     //msync(dst, fd_st.st_size, MS_SYNC);
36     
37     munmap(src, fd_st.st_size);
38     munmap(dst, fd_st.st_size);
39 
40     return 0;
41 }

 

转载于:https://www.cnblogs.com/netos/p/4341829.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值