C++使用mmap读写文件


一般流程是先创建或打开一个文件,然后使用mmap进行内存映射。

 

1. 读取文件

// 打开文件
int fd = open("input.txt", O_RDONLY); // 读取文件长度
int len = lseek(fd,0,SEEK_END); // 建立内存映射
char *addr = (char *) mmap(NULL, len, PROT_READ, MAP_PRIVATE,fd, 0); close(fd); // data用于保存读取的数据
char* data; // 复制过来
memcpy(data, addr, len); // 解除映射
munmap(addr, len)

 

2. 写入文件

假设写入的数据放在char* data中

int len = data.length(); // 打开文件
int fd=open("output.txt", O_RDWR|O_CREAT, 00777); // lseek将文件指针往后移动file_size-1位
lseek(fd,len-1,SEEK_END); // 从指针处写入一个空字符;mmap不能扩展文件长度,这里相当于预先给文件长度,准备一个空架子
write(fd, "", 1); // 使用mmap函数建立内存映射
char* addr = (char*)mmap(NULL, len, PROT_READ|PROT_WRITE,MAP_SHARED, fd, 0); // 内存映射建立好了,此时可以关闭文件了
close(fd); // 把data复制到addr里
memcpy(addr, data, len); // 解除映射
munmap(addr, len)

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM