mmap()函数的主要用途有三个:
1、将一个普通文件映射到内存中,通常在需要对文件进行频繁读写时使用,这样用内存读写取代I/O读写,以获得较高的性能;
2、将特殊文件进行匿名内存映射,可以为关联进程提供共享内存空间;
3、为无关联的进程提供共享内存空间,一般也是将一个普通文件映射到内存中。

头文件:

#include <sys/mman.h>
原型:
void *mmap(void *start,size_t length,int prot,int flags,int fd,off_t offsize);
参数说明:
参数start:指向欲映射的内存起始地址,通常设为 NULL,代表让系统自动选定地址,映射成功后返回该地址。

参数length:代表将文件中多大的部分映射到内存。

参数prot:映射区域的保护方式。可以为以下几种方式的组合:
PROT_EXEC       映射区域可被执行
PROT_READ       映射区域可被读取
PROT_WRITE     映射区域可被写入
PROT_NONE      映射区域不能存取

参数flags:影响映射区域的各种特性。在调用mmap()时必须要指定MAP_SHARED 或MAP_PRIVATE。
MAP_FIXED                如果参数start所指的地址无法成功建立映射时,则放弃映射,不对地址做修正。通常不鼓励用此旗标。
MAP_SHARED          对映射区域的写入数据会复制回文件内,而且允许其他映射该文件的进程共享。
MAP_PRIVATE            对映射区域的写入操作会产生一个映射文件的复制,即私人的“写入时复制”(copy on write)对此区域作的任何修改都不会写回原来的文件内容。
MAP_ANONYMOUS  建立匿名映射。此时会忽略参数fd,不涉及文件,而且映射区域无法和其他进程共享。
MAP_DENYWRITE   只允许对映射区域的写入操作,其他对文件直接写入的操作将会被拒绝。
MAP_LOCKED          将映射区域锁定住,这表示该区域不会被置换(swap)。

参数fd:要映射到内存中的文件描述符。如果使用匿名内存映射时,即flags中设置了MAP_ANONYMOUS,fd设为-1。有些系统不支持匿名内存映射,则可以使用fopen打开/dev/zero文件,然后对该文件进行映射,可以同样达到匿名内存映射的效果。

参数offset:文件映射的偏移量,通常设置为0,代表从文件最前方开始对应,offset必须是分页大小的整数倍。

返回值:

若映射成功则返回映射区的内存起始地址,否则返回MAP_FAILED(-1),错误原因存于errno 中。

错误代码:

EBADF          参数fd 不是有效的文件描述词
EACCES       存取权限有误。如果是MAP_PRIVATE 情况下文件必须可读,使用MAP_SHARED则要有PROT_WRITE以及该文件要能写入。
EINVAL          参数start、length 或offset有一个不合法。
EAGAIN         文件被锁住,或是有太多内存被锁住。
ENOMEM      内存不足。
--------------------- 
作者:为幸福写歌 
来源:CSDN 
原文:https://blog.csdn.net/yzy1103203312/article/details/78286360 
版权声明:本文为博主原创文章,转载请附上博文链接!

void *mmap(void *start,size_t length,int prot,int flags,int fd,off_t offsize);相关推荐

  1. void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset)

    mmap手册见先关章节.本文主要介绍了 mmap 的原理和使用方式,通过本文我们可以知道,使用 mmap 对文件进行读写操作时可以减少内存拷贝的次数,并且可以减少系统调用的次数,从而提高对读写文件操作 ...

  2. void指针(void*):void*存放任意对象的地址、通过(int*)a转换指针类型

    0.void*简介 void*是一种特殊的指针类型,可用于存放任意对象的地址. void *pv =&obj; // obj 可以是任意类型的对象 void指针pv只保存了对象obj的首地址, ...

  3. C语言试题二十三之编写一个函数void function(int tt[m][n],int pp[n]),tt指向一个m行n列的二维函数组,求出二维函数组每列中最小元素,并依次放入pp所指定一维数组中

    1. 题目 请编写一个函数void function(int tt[m][n],int pp[n]),tt指向一个m行n列的二维函数组,求出二维函数组每列中最小元素,并依次放入pp所指定一维数组中.二 ...

  4. int pthread_atfork(void (*prepare)(void), void (*parent)(void), void (*child)(void));

    /*** pthread_atfork 示例程序* * 作者:rtoax* 日期:2020年11月18日*/ #include <stdio.h> #include <stdlib. ...

  5. 请编写一个函数void fun(int tt[M][N],int pp[N]),tt指向一个M行N列的二维数组,求出二维数组每列中最小元素,并依次放入pp所指一维数组中。

    #include <iostream> #include<iomanip> using namespace std; #define M 3 #define N 4 /*求出二 ...

  6. C语言编程>第七周 ⑧ 请编一个函数void fun(int a[M][N],int b[N]),c指向一个M行N列的二维数组,求出二维数组每列中最大元素,并依次放入b所指一维数组中。

    例题:请编一个函数void fun(int a[M][N],int b[N]),c指向一个M行N列的二维数组,求出二维数组每列中最大元素,并依次放入b所指一维数组中.二维数组中的数己在主函数中赋予. ...

  7. error C2556: 'void __thiscall......overloaded function differs only by return type from 'int __thisc

    error C2556: 'void __thiscall......overloaded function differs only by return type from 'int __thisc ...

  8. [转]C/C++语言void及void指针深层探索

    1.概述 许多初学者对C/C++语言中的void及void指针类型不甚理解,因此在使用上出现了一些错误.本文将对void关键字的深刻含义进行解说,并详述void及void指针类型的使用方法与技巧. 2 ...

  9. C/C++语言void及void指针深层探索 .

    1.概述 许多初学者对C/C++语言中的void及void指针类型不甚理解,因此在使用上出现了一些错误.本文将对void关键字的深刻含义进行解说,并详述void及void指针类型的使用方法与技巧. 2 ...

最新文章

  1. 四、双向链表的操作分析和代码实现
  2. SQL Activity Monitor
  3. 节流函数的实现,一次面试题遇到的编程题
  4. 究极探秘!你知道程序员最喜欢做的四件事是什么吗?
  5. Zabbix监控指定端口的步骤
  6. bind9局域网其他用户不能解析_linux dns server bind9 内网域名解析
  7. 决策树算法小结(一) ID3原理及代码实现
  8. 开源工具软件XMusicDownloader——音乐下载神器
  9. SWMM源码编译LNK2001 无法解析的外部符号 _swmm_close@0
  10. win7 windows update 错误80072efe解决方法
  11. python有哪些学习内容_python学习内容包括哪些
  12. Linux-bash笔记
  13. 如何写互联网产品分析报告
  14. 《自然-机器智能》:神经形态技术可使大型深度学习网络节能16倍
  15. 解决office,word奔溃的问题
  16. Java详细讲解OOP面向对象
  17. Win7 Wifi和安卓端连接
  18. php linux 缓存文件,Linux下搭建网站提示缓存文件写入失败的处理办法
  19. STK仿真日记之双星相位轨控
  20. 在OpenCV中使用Mask R-CNN

热门文章

  1. leetcode题解538-把二叉搜索树转化为累加树
  2. Java的Stack类
  3. 49.Kth Largest Element in an Array
  4. 汇编:将指定的内存中连续N个字节填写成指定的内容
  5. css3-background clip 和background origin
  6. 节省内存的嵌入式软件设计技巧
  7. linux 窗口不能移动的替换命令
  8. Android操作系统手机遇冷 国外辉煌国内难现
  9. blog.mm index.php,每天一个WordPress文件:index.php
  10. mysql 监控工具安装_Mysql监控工具Innotop工具安装