mmap 参数 :
addr : 依据边界颗粒度 (提升到某个页面的整数倍)
length , offset : 总是某个页面的整数倍
页面大小 : sysconf(_SC_PAGE_SIZE); 一般 4096 或 8192
基础:
如果映射大小超过了文件大小 , 则在映射区写入的字节将被丢弃
以下例子 可使用 od -b -A d 1.dat 来查看写入情况
int fd = open("1.dat",O_RDWR|O_CREAT|O_TRUNC,0777);
ftruncate(fd,5000);
//这里是 4096 字节
int pagesize = sysconf(_SC_PAGE_SIZE);
printf("pagesize : %d\n", pagesize);
//1024 被提升到 4096 字节.
char *p = (char*)mmap(NULL,1024,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0);
p[pagesize - 1] = 1;
printf("p[%d] = %d\n" , pagesize,p[pagesize - 1]);
//p[pagesize] = 1; //出错 . 超出了映射范围
int fd = open("1.dat",O_RDWR|O_CREAT|O_TRUNC,0777);
ftruncate(fd,5000);
//这里是 4096 字节
int pagesize = sysconf(_SC_PAGE_SIZE);
printf("pagesize : %d\