在很多linux共享内存例子中都能看到
mmap(NULL, sizeof(int), PROT_READ|PROT_WRITE, MAP_ANONYMOUS|MAP_SHARED, -1, 0);
实际上这是匿名内存映射,相当于正常正常使用的mmap的
fd=open("/dev/zero",O_RDWR);
if(fd==-1){
printf("open /dev/zero null\n");
return -1;
}
addr=mmap(NULL,sizeof(int),PROT_READ|PROT_WRITE,MAP_SHARED,fd,0);
if(addr == NULL){
printf("mmap error\n");
return -1;
}
为什么要使用匿名内存映射呢?
常规创建mmap映射区有一点不方便的地方,那就是每次建立映射区都需要依赖一个文件(.txt和fd或者其他)才能实现,通常为了建立映射区需要open一个临时文件,创建mmap好了之后再unlink、close比较麻烦。这时候可以直接使用匿名映射来代替,Linux系统提供了一个方法:借助mmap函数的标志位参数flags来制定:使用 MAP_ANONYMOUS(匿名的)
如果系统不支持匿名内存映射,则可以使用第二种方法能够相同达到匿名内存映射的效果。
如果支持MAP_ANONYMOUS直接利用第一种即可,代码更加简化。