百度的一个博客文章--Linux的mmap文件内存映射机制
#include <stdlib.h>
#include <sys/mman.h>
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>
int main(void)
{
int *p;
int *p2;//
int fd = open("hello", O_CREAT|O_RDWR);
if (fd < 0) {
perror("open hello");
exit(1);
}
p =(int*) mmap(NULL, 4100, PROT_WRITE|PROT_READ, MAP_SHARED, fd, 0);
ftruncate(fd, 4100);
if (p == MAP_FAILED) {
perror("mmap1\n");
exit(1);
}
ftruncate(fd, 5000);//改变文件大小
p2 = (int*)mmap(NULL, 10, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 1024*4);//
if(p2 == MAP_FAILED)
{
printf(strerror(errno));
exit(1);
}
close(fd);//关闭了文件操作符也不会有影响
p[0] = 0x121212;
p[1024] = 0x343434;
p2[0] = 0x454545;
p2[1] = 0x787878;
munmap(p, 6);
munmap(p2,10);
return 0;
}
|
映射的位置和大小必须在文件中存在,否则会出错;
不按页面对其映射会映射失败,错误显示为Invalid argument;
越界写对map映射读写,会出现段错误;
阅读(1793) | 评论(0) | 转发(0) |