mmap的MAP_SHARED 與MAP_PRIVATE權限是衝突的,如果mmap的權限爲
MAP_PRICATE則open打開文件的權限對mmap影響不大,如果mmap的
權限爲MAP_SHARED 那麼open函數的權限最好取O_RDWR,不然很容易
報錯.
mmap的偏移量,即函數中的參數offset的值儘量是4096的整數倍,因爲
mmap是按照頁來分配內存的,如果不是整數倍,則mmap函數報錯。
當open返回的文件標識符提前關閉,對於內存映射的數據同步沒有影響
#include<unistd.h>
#include<fcntl.h>
#include<sys/mman.h>
#include<sys/stat.h>
#include<sys/types.h>
#include<cstdio>
#include<iostream>
#include<unistd.h>
#include<cstdlib>
void sys_err(const char * str)
{
perror(str);
exit(-1);
}
int main()
{
char *mem;
int len;
int fd = open("hello",O_RDWR);
if(fd < 0)
{
sys_err("open");
}
len = lseek(fd,0,SEEK_END);
mem = static_cast<char *>(mmap(NULL,len,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0));
if(mem == MAP_FAILED)
{
sys_err("mmap");
}
std::cout<<mem<<std::endl;
munmap(mem,len);
close(fd);
return 0;
}