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