mmap函數創建進程 linux

mmap 中的讀寫權限 與打開文件的讀寫權限沒有任何關聯,但是
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;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章