1 mmap函数作用
将文件在磁盘上的位置直接映射到进程虚拟内存区域,那么进程在对该虚拟内存区域进行操作时就好像直接进行了文件的读写操作,不需要调用read和weite函数(虚拟内存技术和零拷贝)
2 相关函数
#include<unistd.h>
#include<sys/mman.h>
/*
* start指定地址,一般为NULL,由内核自定
* lenth建立的虚拟内存大小,如果要追加,最好大于文件大小
* port 区域读写权利
* flag 映射对象标志
* fd映射的文件描述符
* offset偏移 0
* 返回虚拟地址首地址
*/
void *mmap(void* start,size_t lenth,int port,int flag,int fd,off_t offset);
int munmap(void* start,size_t lenth);//进程释放该虚拟内存
3 实例
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
int main()
{
struct stat stat;
int fd = open("text.txt", O_RDWR) ;
cout << fd << endl;
cout << fstat(fd, &stat) << endl;
char* ptr = NULL;
ptr = (char*)mmap(NULL, 100, PROT_READ| PROT_WRITE, MAP_SHARED,fd, 0);
printf("读取到的:%s\n", ptr);
memcpy(ptr, "hello hello", 100);
printf("再次读取到的:%s\n", ptr);
return 0;
}