博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mmap复制文件
阅读量:5836 次
发布时间:2019-06-18

本文共 1340 字,大约阅读时间需要 4 分钟。

#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 
2 #include
3 #include
4 #include
5 #include
6 #include
7 #include
8 #include
9 #include
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

你可能感兴趣的文章
UML中关联,组合与聚合等关系的辨析
查看>>
《大数据管理概论》一3.2 大数据存储与管理方法
查看>>
《R语言数据挖掘》----1.10 数据属性与描述
查看>>
PowerBuilder开发简单计算器
查看>>
从HDFS看分布式文件系统的设计需求
查看>>
怎样使用linux的iptables工具进行网络共享
查看>>
《HTML5与CSS3实战指南》——导读
查看>>
RHEL6下安装oracle 10g(一)
查看>>
Redhat 7 httpd 显示wsgi页面
查看>>
mysql的binlog
查看>>
Kconfig的格式
查看>>
禁止用户更改IP地址的设置方法有哪些
查看>>
【更新】Word组件Spire.Doc for .NET V6.0.21发布 | 附下载
查看>>
软件测试流程
查看>>
Uncaught TypeError: xxx.submit is not a function解决方案
查看>>
07.继承和聚合
查看>>
关于Cursor的moveToFirst和moveToNext的意义
查看>>
个人--工资划分5份
查看>>
虚拟化--006 vmware高级内存属性
查看>>
有关文件下载的文件名
查看>>