博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UNIX环境变量--存储映射I/O
阅读量:2194 次
发布时间:2019-05-02

本文共 1093 字,大约阅读时间需要 3 分钟。

 存储映射I/O可以将一个磁盘文件映射到一个存储空间的缓冲区上。于是,在从缓冲区读数据时,相当于读文件,往缓冲区写数据时,相当于写文件。这样就可以在不使用read/write的情况下进行文件I/O。在使用该功能之前,需要告诉内核将一个指定的文件映射到存储区域。

mmap()函数将进程的虚拟地址空间与文件fd建立映射关系,这样进程就可以像访问内存一样,访问文件了。

#include 
void* mmap(void* start,size_t length,int prot,int flags,int fd,off_t offset);/*参数说明如下: start:指定映射存储区的起始地址(并不保证生效),如果为NULL,则表示系统自行选择。 length:存储区的长度 fd:映射文件的文件描述符 offset:映射文件的起始偏移量 prot:指定映射区的读写权限,注意此权限不能高于文件的权限。 取值为(PROT_READ:可读、PROT_WRITE:可写、PORT_EXEC:可执行、PROT_NONE:不可访问) flags:指明存储区的各种属性: MAP_FIXED:若start为非NULL,则映射存储区的起始地址一定是start MAP_SHARE:若对存储区修改相当于对文件修改 MAP_PRIVATE:对存储区修改,将会产生一个副本,即不影响原文件。*/

此外,一般mmap()函数常与munmap()、msync()结合一起使用,函数声明如下:

#include
int mprotect(void* addr,ssize_t len.int port);/*修改存储区权限*/int msync(const void* start,length,int flags);/* 立即将内存修改内容写入文件 *//*flags选项如下,必须指定MS_ASYNC或MS_ASYNC,MS_INVALIDATE为可选项: MS_ASYNC: 请内核尽快将修改写入文件 MS_SYNC : 在此函数返回前,将修改写入到文件 MS_INVALIDATE:通知操作系统丢弃指定范围内的所有页内容*/int munmap(void* start,size_t length); /* 解除映射 *//*进程结束将会解除存储区的映射关系,因为即使文件关闭,并不会解除其映射*/

转载地址:http://iwpub.baihongyu.com/

你可能感兴趣的文章
Intellij IDEA使用(六)—— 使用Intellij IDEA创建Java项目并配置jar包
查看>>
Eclipse使用(十)—— 使用Eclipse创建简单的Maven Java项目
查看>>
Eclipse使用(十一)—— 使用Eclipse创建简单的Maven JavaWeb项目
查看>>
Intellij IDEA使用(十三)—— 在Intellij IDEA中配置Maven
查看>>
面试题 —— 关于main方法的十个面试题
查看>>
集成测试(一)—— 使用PHP页面请求Spring项目的Java接口数据
查看>>
使用Maven构建的简单的单模块SSM项目
查看>>
Intellij IDEA使用(十四)—— 在IDEA中创建包(package)的问题
查看>>
FastDFS集群架构配置搭建(转载)
查看>>
HTM+CSS实现立方体图片旋转展示效果
查看>>
FFmpeg 命令操作音视频
查看>>
问题:Opencv(3.1.0/3.4)找不到 /opencv2/gpu/gpu.hpp 问题
查看>>
目的:使用CUDA环境变量CUDA_VISIBLE_DEVICES来限定CUDA程序所能使用的GPU设备
查看>>
问题:Mysql中字段类型为text的值, java使用selectByExample查询为null
查看>>
程序员--学习之路--技巧
查看>>
解决问题之 MySQL慢查询日志设置
查看>>
contOS6 部署 lnmp、FTP、composer、ThinkPHP5、docker详细步骤
查看>>
TP5.1模板布局中遇到的坑,配置完不生效解决办法
查看>>
PHPstudy中遇到的坑No input file specified,以及传到linux环境下遇到的坑,模板文件不存在
查看>>
TP5.1事务操作和TP5事务回滚操作多表
查看>>