mmap 文件不能为空
mmap 文件不能为空
void *mmap(void *addr, size_t length, int prot, int flags,int fd, off_t offset);
int munmap(void *addr, size_t length);
mmap 讲过的人太多了。写这篇的目的,是为了记录今天使用过程中遇到的一个问题:
当映射内存大小大于文件大小时,将导致映射内存无法读写,程序报段错误;
说三遍:文件不能为空!文件不能为空! 文件不能为空!
先说一下解决方案:
打开文件后,调用ftruncate() ,将已打开的文件截断到需要的内存大小即可;
官方推荐:echo 20 > /proc/sys/vm/nr_hugepages;配置20个巨页;配合flags参数使用*//明天试试*
https://man7.org/linux/man-pages/man2/mmap.2.html
看官方文档最靠谱。虽然文档里没说文件不能为空 或者我看漏了
结合百度翻译,简单翻一下,哈哈!
描述
mmap 建立一个到调用继承的虚拟地址空间的映射。addr指定虚拟地址空间的起始地址,length指定映射空间长度(必须大于0);
如果addr 赋NULL,内核选一个页对齐的空闲虚拟空间地址作为起始地址,这是最合适的了;“最好就是传NULL”
如果addr不是NULL, 会以他为基准,找一个页对齐的地址。所以赋值也白赋;
你传的addr甚至可能不是空闲虚拟地址,剩下的还是内核做主;
有名mmap的起始地址由offset这个参数决定,决定从文件offset位置开始映射;还应该是页对齐;
mmap 返回后,文件描述符就可以立马关了, 毕竟mmap可能会增加内核中文件的应用计数;
prot 描述对这块内存期望的权限,w/r/x
flags 决定了公开性,对内存的改变是否对其他使用这个文件mmap的进程可见,不难理解,如果private,可能会单独给这个进程拷贝一份内存;简单点说要进程间共享 就配置MAP_SHARED ;
flags 还有很多其他的属性:
MAP_HUGETLB:这个就是进行巨页映射;可以尽量解决映射长度超出文件长度的问题;
MAP_ANONYMOUS :匿名mmap 没有依赖文件,fd=-1,其缓存长度应该直接与length进行页对齐;
个人分(cai)析(ce)放最后:
- 空文件,内核也没有分配缓存页,返回的只是进程虚拟空间一段空闲空间的起始地址,并没有实现地址映射;
- 映射长度超出文件长度页对齐地址时,也会出现同样的问题;
mmap 文件不能为空相关推荐
- Android mmap 文件映射到内存介绍
本文链接: Android mmap 文件映射到内存介绍 Android开发中,我们可能需要记录一些文件.例如记录log文件.如果使用流来写文件,频繁操作文件io可能会引起性能问题. 为了降低写文件的 ...
- Linux下创建硬链接,文件访问为空,提示:xxxx: 符号连接的层数过多
Linux下创建软链接|硬链接,文件访问为空,提示:x x x: 符号连接的层数过多. 原因:创建符号链接的时候未使用绝对路径,无论是源文件路径还是目标路径,都需要使用绝对路径. 如: ln -s / ...
- python3 readline,Python3:readlines 或者 enumerate 是否会导致文件流为空
python3 环境 代码如下: file_path = os.getcwd() + "/test.txt" project_file = open(file_path," ...
- project下查看那些文件夹是空的
git不能追踪空文件夹.我们在空文件夹下添加readme.txt文件来解决.有时候我们不知道project下到底有那些文件夹是空的.使用 find -type d -empty 就能列出来.
- linux判断文件是否为空,linux shell编程 如何判断一个文件是否为空
最近在写一个小的shell程序,遇到这个问题,在diff -q 两个文件时,如果文件不相同就输出到result文件中,若相同则无输出,即result文件为空,但如何判断result文件是否为空并继续下 ...
- win10系统适配器选项网络连接文件夹为空解决办法
描述: win10系统适配器选项网络连接文件夹为空解决办法 步骤: 点击左下角win图标->Windows系统->命令提示符->右键更多以管理员身份运行命令提示符 输入命令:nets ...
- 使用XMind打开.mmap文件不显示问题
1.问题如下: 使用XMind直接打开.mmap文件时,不显示: 2.解决方式: 1.选择XMind左上方的'文件',然后选择'导入': 2.在弹出如下图页面选择Mindjet MindManager ...
- Python操作FTP服务器实现文件和文件夹的上传与下载,python清理ftp目录下的所有文件和非空文件夹
Python 连接 FTP 服务器并实现文件夹上传实例演示 第一章:连接 FTP 服务器并实现文件夹上传 ① 连接 FTP 服务器 ② 区分文件和文件夹名 ③ 文件夹名包含空格处理 ④ 使用递归实现: ...
- Win11系统启动文件夹是空的怎么解决?
Win11系统启动文件夹是空的怎么解决?有用户发现自己系统的启动文件夹里面没有任何的文件,这样可能会导致我们的电脑出现问题,导致无法正常的启动桌面程序.那么如何去解决这个问题,一起看看具体的解决方法分 ...
- webpack打包后的文件夹是空的_深入理解 Webpack 打包分块(下)
前言 随着前端代码需要处理的业务越来越繁重,我们不得不面临的一个问题是前端的代码体积也变得越来越庞大.这造成无论是在调式还是在上线时都需要花长时间等待编译完成,并且用户也不得不花额外的时间和带宽下载更 ...
最新文章
- 汇总下几个IP计算/转换的shell小脚本-转
- openblas 矩阵算法库 简介
- 学习ASP.NET一定要学习ASP.NET AJAX吗?
- C++实现快速排序算法QuickSort()
- linux 烧写(1)
- server sql 水平分表_springboot集成Shardingsphere进行分库分表
- 【kafka】Timeout of 60000ms expired before the position for partition could be determined
- 打游戏时领悟了“向死而生”,这个AI算法真的不虚强化学习
- ZeroC IceBox介绍及demo构建
- 【设计模式】迭代器模式
- 油猴脚本插件 千图网无水印原图素材
- TLPI UNIX linux系统编程手册源代码运行
- react等 一些视频学习网址
- 游戏玩家的程序猿之路
- 动态jenkins slave
- anaconda初体验
- Python合并两个列表,使两个列表拼接起来
- 那些改变过世界的代码都是怎么写的?
- c语言编写简易打飞机游戏
- 免费获取百度网盘会员一天或七天的不限速网盘会员