mmap

  1. mmap系统调用

void* mmap ( void * addr , size_t len , int prot , int flags ,int fd , off_t offset )

mmap负责将文件映射到虚拟地址空间,通过对这段内存的读取和修改而不用read和write对文件进行修改。

2.maap函数的参数问题

addr:表示映射区的起始地址,NULL表示映射地址由系统自行安排

len:表示映射到内存的文件长度

prot:映射区的保护方式

PROT_EXEC:映射区可被执行

PROT_READ:映射区可被读

pROT_WRITE:映射曲可被写

flags:映射区的特性

MAP_SHARED:写入映射区的数据可以复制回文件,且允许其他映射该文件的进程共享。

MAP_PRIVATE:对映射区的写入操作会产生一个映射区的复制(copy-on-write), 对此区域所做的修改不会写回原文件。

fd: 由open返回的文件描述符, 代表要映射的文件。

offset: 以文件开始处的偏移量, 必须是分页大小的整数倍, 通常为0, 表示从文件头开始映射。

编程如下:

时间: 2024-10-29 19:10:37

mmap的相关文章

linux共享内存之mmap

这应该可以算得上是IPC的一种,虽然效率可能并没有其它IPC方式高. 看到map很容易联想到映射.的确,mmap就是一种映射方式,将打开的文件和一段连续的内存做映射.使得对内存进行操作即可以实现对文件的读写,反过来,也就是说,可以通过这种方式来达到进程通信. mmap系列涉及三个函数. void * mmap(void *buf, size_t len, int prot, int flag, int fd, off_t offset); 此函数建立一个共享内存,prot即为权限,可选值有PRO

mmap 与 read/write

mmap与read/write两条路线对文件的访问比较 我们知道无论是通过mmap或read/write访问文件在内核中都必须经过缓存, 当需要从文件读写内容时,都经过内存拷贝的方式与内核中的缓存进行通讯.     1. 用read/write方式,用户须向内核指定要读多少,内核再把得到的内容从内核缓存拷向用户空间:写也须要有一个大致如此的过程.     2. mmap的作用是通过把文件的某一块内容映射到用户空间上,即将之前所述的内核缓存映射到用户空间,这样就可以直接通过内核缓冲池读写这一块内容

linux中mmap系统调用原理分析与实现

参考文章:http://blog.csdn.net/shaoguangleo/article/details/5822110 linux中mmap系统调用原理分析与实现 1.mmap系统调用(功能)      void* mmap ( void * addr , size_t len , int prot , int flags ,int fd , off_t offset )      内存映射函数mmap, 负责把文件内容映射到进程的虚拟内存空间, 通过对这段内存的读取和修改,来实现对文件的

mmap存储映射IO

mmap,munmap-- #include <sys/mman.h> void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset); int munmap(void *addr, size_t length); int mprotect(void *addr, size_t len, int prot); int msync(void *addr, size_t length, int fla

第二十天:mmap内存映射

可以说,一天的时间都在了解内存映射mmap这个函数,冯诺依曼结构中表示运算器不能直接对硬盘上的文件进行操作.mmap函数的功能就是将文件映射到某一段内存中,然后操作内存就相当与操作文件.这样的话对文件操作更加方便.mamp函数的定义如下:void *mmap(void *start,size_t length,int prot,int flags,int fd,off_t offsize);一共有六个参数,参数算是比较多了.第一个表示映射内存的起始地址,如果为NULL,那么操作系统会自动的找到空

linux mmap系统调用

函数原型: void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset); 作用:将文件映射到以addr为起始地址的进程内存空间,在调用时,通常将addr参数传为NULL,由内核选择起始的虚拟地址空间 对应的munmap(2)系统调用解除映射关系,将内存中的数据写入到文件.可以这样理解,调用munmap之后,mmap返回的指针为野指针了,不能够再访问其指向的空间 在mmap(2)返回之后,可以通过

MMAP和DIRECT IO区别【转】

转自:http://www.cnblogs.com/zhaoyl/p/5901680.html 看完此文,题目不言自明.转自 http://blog.chinaunix.net/uid-27105712-id-3270102.html 在Linux 开发中,有几个关系到性能的东西,技术人员非常关注:进程,CPU,MEM,网络IO,磁盘IO.本篇文件打算详细全面,深入浅出.剖析文件IO的细节.从多个角度探索如何提高IO性能.本文尽量用通俗易懂的视角去阐述.不copy内核代码. 阐述之前,要先有个大

【转】mmap 与 read/write

本文转自http://www.cnblogs.com/KevinT/p/3823286.html mmap与read/write两条路线对文件的访问比较 我们知道无论是通过mmap或read/write访问文件在内核中都必须经过缓存, 当需要从文件读写内容时,都经过内存拷贝的方式与内核中的缓存进行通讯. 1. 用read/write方式,用户须向内核指定要读多少,内核再把得到的内容从内核缓存拷向用户空间:写也须要有一个大致如此的过程. 2. mmap的作用是通过把文件的某一块内容映射到用户空间上

MMAP和DIRECT IO区别

看完此文,题目不言自明.转自 http://blog.chinaunix.net/uid-27105712-id-3270102.html 在Linux 开发中,有几个关系到性能的东西,技术人员非常关注:进程,CPU,MEM,网络IO,磁盘IO.本篇文件打算详细全面,深入浅出.剖析文件IO的细节.从多个角度探索如何提高IO性能.本文尽量用通俗易懂的视角去阐述.不copy内核代码. 阐述之前,要先有个大视角,让我们站在万米高空,鸟瞰我们的文件IO,它们设计是分层的,分层有2个好处,一是架构清晰,二

MySQL测试环境遇到 mmap(xxx bytes) failed; errno 12解决方法

查看Mysql日志 InnoDB: Initializing buffer pool, size = 128.0M InnoDB: mmap(137363456 bytes) failed; errno 12 InnoDB: Completed initialization of buffer pool InnoDB: Fatal error: cannot allocate memory for the buffer pool [ERROR] Plugin 'InnoDB' init func