- 论坛徽章:
- 1
|
在C++版也发了,但是好像我觉得发在这个版更合适些。
代码大概如下:
int page_size = sysconf(_SC_PAGESIZE); //4096
int fd = open("mem", O_CREAT | O_RDWR | O_TRUNC, 0777);
lseek(fd, page_size + 99, SEEK_SET)//file_size = 4196
write(fd, &c, sizeof(char));
char *pmap = (char *)mmap(NULL, page_size * 3, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
pmap[page_size * 3 + 4096] = 'x';
printf("pmap = %c.\n", pmap[page_size * 3 + 4096]);//可以输出x
我想问的是:
1、mmap的第二个参数length和文件大小(长度)有没有什么必然联系?我这里生成文件大小为4196字节。但是映射的是4096*3这么大,也没见报错?
2、而且我直接访问pmap[page_size * 3 + 4096],已经超出映射内存的大小了,也没有收到bus error 或者SIGSEV?这是什么原因呢?
谢谢。 |
|