mmap文件怎么打开,手机如何打开mmap

文件内存映射(mmap)之前看过很多文章提及到,但是都没有写iOS中具体的实现,只是都说对于大文件读写效率比较高等。所以作者就专门研究了以下mmap技术,并且实现了一下mmap文件映射是将文件的磁盘扇

文件内存映射(mmap)之前看过很多文章提及到,但是都没有写iOS中具体的实现,只是都说对于大文件读写效率比较高等。所以作者就专门研究了以下mmap技术,并且实现了一下

mmap

文件映射是将文件的磁盘扇区映射到进程的虚拟内存空间的过程。一旦被映射,您的应用程序就会访问这个文件,就好像它完全驻留在内存中一样(不占用内存,使用的是虚拟内存)。当您从映射的文件指针读取数据时,将在适当的数据中的内核页面并将其返回给您的应用程序。

疑问

那大家就会想了,既然不消耗内存,那岂不是都用mmap就行了,这样多好啊,又不占内存。其实不然,并不是所有的场景都适合使用mmap的

适合的场景

您有一个很大的文件,其内容您想要随机访问一个或多个时间。

您有一个小文件,它的内容您想要立即读入内存并经常访问。这种技术最适合那些大小不超过几个虚拟内存页的文件。(页是地址空间的最小单位,虚拟页和物理页的大小是一样的,通常为4KB。)

您需要在内存中缓存文件的特定部分。文件映射消除了缓存数据的需要,这使得系统磁盘缓存中的其他数据空间更大。

当随机访问一个非常大的文件时,通常最好只映射文件的一小部分。映射大文件的问题是文件会消耗活动内存。如果文件足够大,系统可能会被迫将其他部分的内存分页以加载文件。将多个文件映射到内存中会使这个问题更加复杂。

不适合的场景

您希望从开始到结束的顺序从头到尾读取一个文件。

这个文件有几百兆字节或者更大。将大文件映射到内存中会快速地填充内存,并可能导致分页,这将抵消首先映射文件的好处。对于大型顺序读取操作,禁用磁盘缓存并将文件读入一个小内存缓冲区。

该文件大于可用的连续虚拟内存地址空间。对于64位应用程序来说,这不是什么问题,但是对于32位应用程序来说,这是一个问题。

该文件位于可移动驱动器上。

该文件位于网络驱动器上。

实现

这个代码实现的功能就是首先读取存储在我们沙盒的文件,然后在该文件的上继续写入数据(追加数据)

#import

"ViewController.h"

import

int

MapFile( char * inPathName,void

** outDataPtr,size_t * outDataLength );

void

ProcessFile( char * inPathName )

{

size_t dataLength;

void

* dataPtr;

void

*start;

if( MapFile( inPathName,&dataPtr,&dataLength ) == 0

)

{

start = dataPtr;

dataPtr = dataPtr+3;

memcpy(dataPtr,"CCCC",4);

/ Unmap files:

munmap(start,7);

.mmap文件用MindManager软件可以打开。Mindjet MindManager是一个创造、管理和交流思想的通用标准,其可视化的绘图软件有着直观、友好的用户界面和丰富的功能,这将帮助您有序地进行组织您的思维、资源和项目进程。MindManager也是一。

}

}

/ MapFile

/ Exit: outDataPtra pointer to the mapped memory region

/ outDataLength size of the mapped memory region

手机如何打开mmap,/ return value an errno value on error (see sys/errno.h)

/ or zero for success

int

MapFile( char * inPathName,void

** outDataPtr,size_t * outDataLength )

{

int

outError;

int

fileDescriptor;

struct stat statInfo;

/ Return safe values on error.

outError = 0;

*outDataPtr = NULL;

*outDataLength = 0;

/ Open the file.

mmap文件怎么打开

fileDescriptor = open( inPathName,O_RDWR,0

);

if( fileDescriptor < 0

)

{

outError = errno;

}

else

{

/ We now know the file exists. Retrieve the file size.

if( fstat( fileDescriptor,&statInfo ) != 0

)

{

outError = errno;

}

else

{

fsync(fileDescriptor);//刷新文件

*outDataPtr = mmap(NULL。

statInfo.st_size+4。

PROT_READ|PROT_WRITE。

MAP_FILE|MAP_SHARED。

fileDescriptor。

0);

将文件通过QQ或者其他方式发给另一台电脑,可以正常打开,然后将文件另存为一份新的mmap文件再发送到本机,即可打开文件。方案三、删除备注。之前有用户应该碰到过所谓参数错误的问题,是通过删除本地模板文件中的备注的方式。

if( *outDataPtr == MAP_FAILED )

{

outError = errno;

}

else

{

/ On success,return the size of the mapped file.

*outDataLength = statInfo.st_size;

}

}

/ Now close the file. The kernel doesn’t use our file descriptor.

close( fileDescriptor );

}

return

.mmap文件可以用MindManager软件打开。使用MindManager软件打开.mmap文件的操作步骤如下:1、首先找到电脑文件夹中的.mmap文件,双击即可打开。2、在弹出的对话框中选项打开方式这个选项。3、然后再选择MindManager软件打开。。

outError;

}

@interface

ViewController ()

1、直接在手机桌面上,点击软件进入,如下图所示。2、需要选择Files跳转,如下图所示。3、如果没问题,就找到相关mmap文件并确定打开,如下图所示。4、这样一来会查到图示的结果,即可实现要求了,如下图所示。

@property (weak,nonatomic) IBOutlet UITextView *mTV;

@end

@implementation ViewController

- (void)viewDidLoad {

[super

viewDidLoad];

NSString *path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES).firstObject;

NSString *str = @"AAA";

NSError *error;

NSString *filePath = [NSString stringWithFormat:@"%@/text.txt",path];

[str writeToFile:filePath atomically:YES encoding:NSUTF8StringEncoding error:&error];

if

(error) {

NSLog(@"%@",error);

}

ProcessFile(filePath.UTF8String);

self.mTV.text = result;

}

@end

最重要的就是2个函数:

mmap()

start:映射区的开始地址,设置为0时表示由系统决定映射区的起始地址。 length:映射区的长度。//长度单位是 以字节为单位,不足一内存页按一内存页处理 prot:期望的内存保护标志,不能与文件的打开模式冲突。是以下的某个值,可以通过or运算合理地组合在一起 PROT_EXEC //页内容可以被执行 PROT_READ //页内容可以被读取 PROT_WRITE //页可以被写入 PROT_NONE //页不可访问 flags:指定映射对象的类型,映射选项和映射页是否可以共享。它的值可以是一个或者多个以下位的组合体 fd:有效的文件描述词。一般是由open()函数返回,其值也可以设置为-1,此时需要指定flags参数中的MAP_ANON,表明进行的是匿名映射。 off_toffset:被映射对象内容的起点。

munmap()

上一篇 2023年02月03 09:08
下一篇 2023年01月11 10:19

相关推荐

  • 怎么搜索微信群并加入,微信怎样搜索群名称并添加

    点进来的人一定是最近沉迷“羊了个羊”的人第二关你过了吗?微信怎样搜索群名称并添加,近日,一款名为“羊了个羊”微信小游戏火爆全网。由于太火,服务器2天崩了3次,很多玩家惊呼“我只是睡前玩一玩,没想到给我

    2023年02月01 257
  • kindle怎么使用,kindle新手使用教程

    相比于手机、iPad等设备,kindle的功能是很单一的,kindle就是单纯为阅读而生的。然而,kindle也还是有许多使用上的小技巧的,掌握这些小技巧,绝对能大大优化你的阅读体验;网上一搜,可以找

    2023年01月19 215
  • 京东银行卡怎么解绑,京东支付设置里面没有我的银行卡

    不得不说,京东支付设置里面没有我的银行卡,这是一个对时尚的要求越来越高的时代。当然,大家要的不仅浅层意义上的美,更追求一种品味。精致的妆容,精致的首饰。大家都希望自己的首饰质量好、设计感强,从而体现自

    2023年02月04 268
  • 怎么查wifi密码,手机怎么查自己家wifi密码

    手机怎么查自己家wifi密码,有的时候我们到了一个陌生的地方用万能钥匙破解了WiFi,但是电脑或者没有卡的平板也想上网怎么办?今天部落教你一招轻松看到WiFi密码。首先第一步打开手机【设置】这时候你点

    2023年01月17 273
  • 怎么切换独立显卡,双显卡无法切换到独立显卡

    大家好,今天分享一篇来自小白系统官网(xiaobaixitong.com)的文章。现在很多用户的电脑除了cpu上有核心显卡外还单独配置了独立显卡,通常win10系统下会默认使用核心显卡,双显卡无法切换

    2023年01月17 209
  • 比特币怎么买,普通人怎么购买比特币

    比特币是如何购买的?现在比特币购买的主要方式主要有两种,第一种是自己找比特币持有者购买,直接和卖家商定具体价格、支付方式等问题。另一种就是在各大数字货币交易平台上购买。相较于前者,在平台购买不仅高效稳

    2023年01月09 267
  • 回访客户话术怎么聊天,微信回访客户话术大全

    说起回访老客户,绝大多数家装人员开口就是问问题,或者以新活动优惠邀约客户。那么到底该如何回访老客户,不同的客户回访话术有什么不同呢?一般将需回访的老客户分两种:已成交的老客户(已完工的老客户);进过店

    2023年01月30 221
  • 怎么打开磁盘管理,win10磁盘管理器怎么打开

    移动硬盘无法打开怎么办?当谈及大容量移动存储设备的时候,很多用户都会选择移动硬盘。在平时的工作和生活中,移动硬盘的使用场景非常多,例如,当电脑本地硬盘的存储空间不足时,win10磁盘管理器怎么打开,可

    2023年02月05 217
  • 微信商城怎么开通,微信订阅号商城如何开通

    即日开始,星球开通【分享有奖】计划!邀请有需要的朋友加入我们的星球,即可获得99元现金奖励!-以上仅是部分干货预览截图--今日干货资料领取方式:加入【私域流量研习社】知识星球所选内容均来自网络收集,仅

    2023年01月22 250
  • 怎么关闭qq,怎么关闭qq右上角小窝图标

    qqid怎么关闭?这个qq新推出的id功能,很多用户尝鲜后都觉得不好用,所以想要关闭这个id功能,但是不知道怎么关闭,怎么关闭qq右上角小窝图标,那么想知道的就和小编一起来看看吧!,qqid怎么关闭1

    2023年02月08 233
  • 文件修改时间怎么改

    怎么修改文件创建时间?当我们在电脑上创建一个文件时,创建的时候会被写入软件属性当中,打开文件的属性就能看到创建时间,文件的时间能精确到秒。有时候我们为了不让别人知道文件的真实创建时间,就需要对修改文件

    2023年02月06 217
  • 苹果mp3怎么用,小夹子mp3旧版苹果使用方法

    9月15日,索尼公司官方微信公众号发布了一条非头条新闻,《杜比全景声新碟上架索尼精选Hi-Res》。发烧友对索尼公司在中国大陆地区提供的《索尼精选Hi-Res音乐》app应该不陌生,SOOMAL之前两

    2023年01月20 294
  • 屏幕共享怎么用,手机如何开屏幕共享

    近年来随着网络视频会议广泛运用“屏幕共享”功能逐渐普及在给人们工作生活带来便利的同时1、打开手机最新版的QQ,点击其中一个联系人,在消息框中点击【加号】——【分享屏幕】。2、接着会弹出提示:【qq将要

    2023年02月01 262
关注微信