映射函数void*mmap(void*addr,size_t length,int port,int flags,int fd,off_t offset ) )。
创建角色共享内存映射
参数addr :指定地图区域的起始地址。 通常传递NULL,表示系统将自动分配。
length :共享内存映射区域的大小。=文件的实际大小)
prot :共享内存映射部分的读写属性。 PROT_READ、PROT_WRITE、PROT_READ|PROT_WRITE
flags :标记共享内存的共享属性。 MAP_SHARED、MAP_PRIVATED
软盘:用于创建共享内存映射区域文件的文件描述符。
offset :默认值0。 指示地图文件是所有的。 需要4k的整数倍。
返回值成功,返回地图区域的起始地址。
失败了。 返回map_failed((void* )-1 )并设置错误。
munmap函数intmunmap(void*addr,size_t length () ) ) ) ) ) ) ) ) )
作用释放映射区域
使用注意事项文件大小为0,映射区域的大小不是0。 发生总线错误。 文件大小为0,地图区域的大小为0。 给出无效的参数。 文件权限为只读,映射区域权限为读写。 发生了权限错误。 ftruncate ) )函数来扩大文件大小,文件必须是可写的。 open打开的文件至少是只读的,因为创建映射区域需要读取文件。 (O_RDWR ) open权限授予mmap,mmap权限授予指针。 可以在mmap创建地图区域后关闭文件描述符fd。 然后,访问文件,用地址访问。 offset必须是4k的整数倍。 (MMU映射最小单位为4k )不得越界访问申请的内存映射区域。 munmap释放的地址必须是mmap申请退回的地址。 映射区域的权限为MAP_PRIVATE,对内存所做的更改只对内存有效,位于没有响应的物理磁盘上。 对映射区域的访问权限为MAP_PRIVATE,对于open文件,您必须具有创建映射区域的读取权限。 最终不会写入物理磁盘。 映射区域的权限为MAP_SHARED,其中映射区域的权限=打开文件的权限。 map函数保险存储fd=open('filename ',O_RDWR ) mmap ) null,有效文件大小,PROT_READ|PROT_WRITE,MAP_SHARED,fmap
映射:可以重复读取。 血缘过程用指针通信; 非血缘过程重新映射通信。
匿名测绘血缘关系流程
//法通用intFD=open(/dev/zero )、O_RDWR ); 映射(null,4,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0 ); ///dev/zero可以无限读///dev/null可以无限写在里面//法二Linuxmmap(null,4,PROT_READ|PROT_WRITE,map _ shared |