您的位置:首页 > 运维架构 > Linux

Linux下IPC方法-内存映射区(二)mmap函数解析

2018-03-26 19:37 751 查看
1、存储映射I/O的概念及为什么要用内存映射区?
    存储映射I/O(memory-mapped I/O):使一个磁盘文件与存储空间中的一个缓冲区相映射。于是从缓冲区中取数据就相当于读文件中的相应字节了。将数据存入缓冲区则相应的字节就写入到文件。这样就可以在不适用read和write函数的情况下,使用地址(指针)完成I/O操作。

2、内存映射区的特点?
    既可以在有血缘关系进程间,也可以在非血缘关系进程间通信。
2、mmap函数
    ①作用:将磁盘文件的数据映射到内存里,用户通过修改内存(通过指针)就能修改磁盘文件。

    ②函数要包含的头文件:include<sys/mman.h>
    ③函数参数:Void *mmap(
void
4000
*addr, //映射区首地址,传NULL即可
size_t length, //映射区的大小
//除了0外随便指定(一定不能传0),但是最后实际值会是4k整数倍,一般文件多大,length指定多大
int prot, //映射区权限
//PROT_READ——映射区必须要有读权限
//PROT_WRITE
//读写都指定时:PROT_READ|PROT_WRITE
int flags, //标志位参数
//MAP_SHARED:修改了内存数据,会同步到磁盘
//MAP_PRIVATE:修改了内存数据,不会同步到磁盘
int fd, //文件描述符
//干嘛的文件描述符?要映射的文件对应的fd
//怎么得到?先open这个文件
off_t offset, //映射文件的偏移量
//作用:映射的时候文件指针的偏移量,必须是4k的整数倍,一般指定0,不偏移
)    ④返回值:调用成功返回映射区的首地址,调用失败防护MAP_FAILED宏(其实是(void*)-1)。
3、munmap函数
    ①函数作用:释放内存映射区

    ②函数原型及参数:int munmap(void *addr, size_t length);
//addr:mmap函数的返回值
//length:mmap的第二个参数,映射区的长度    ③函数返回值:On success, munmap() returns 0, on failure -1, and errno is set (probably to EINVAL)。    
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  APUE IPC