start : 要把記憶體放哪?如果是0代表請system決定。
length : 要把fd的多少大小(長度)映射到記憶體。
prot : 保護方式
PROT_EXEC : 可被執行
PROT_READ : 可被讀取
PROT_WRITE : 可被寫入
PROT_NONE : 不能存取
flag : 特性
MAP_FIXED : 如果start指定的位置無法被映射則放棄
MAP_SHARED : 寫入資料到映射區會寫回fd內,供其他process使用。
MAP_PRIVATE : 對fd作複製,所有動作不影響到fd.
MAP_ANONYMOUS : 忽略fd,和檔案無關。
MAP_DENYWRITE : 只允許經由映射區作寫入,不允許其他process對fd寫入
MAP_LOCKED : 鎖定映射區,不被swap out
offset : 從fd的offset位置開始映射,必須要是分頁大小的整數倍。
return code
成功則傳回映射的起始位址,否則傳回MAP_FAILED(-1),原因再errno中。
#include <sys/mman.h>
#include <stdio.h>
#include <fcntl.h>
int main(int argc,int *argv[])
{
int fd;
char *mapped_mem;
const int len=100;
int i;
fd = open("testfile",O_RDWR | O_CREATE);
lseek(fd,length+1,SEEK_SET);
write(fd,"\0",1);
lseek(fd,0 ,SEEK_SET);
mapped_mem=mmap(0,len,PROT_WRITE,MAP_SHARED,fd,0);
close(fd);
for(i=0;i<10;i++)
mapped_mem[i]='0'+i;
return 0;
}
執行後會產生testfile檔,cat後會是
1234567890
沒有留言:
張貼留言