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)


原文链接: https://www.cnblogs.com/sumuyi/p/12813787.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/196768

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月12日 下午7:21
下一篇 2023年2月12日 下午7:21

相关推荐