mmap

将文件映射到内存, 对这块内存的修改会自动同步到相应的文件中

void *mmap(void *addr, size_t len, int prot, int flag, int fd, off_t off)
返回值为void *, 也就是映射内存的首地址
void *addr, 一般直接填0, 表示由系统自动分配合适大小的内存
size_t len, 文件映射的长度
int prot, 读写属性PROT_READ, PROT_WRITE, PROT_EXEC, PROT_NONE
int flag, 一般指定为MAP_SHARED
int fd, 要映射的文件描述符
off_t off, 文件映射的偏移位置 int mprotect(void *addr, size_t len, int prot)
修改已经打开的mmap的读写权限 int msync(void *addr, size_t len, int flags)
与标准io的fflush类似, msync用于将内存修改立即写回文件 int nunmap(void *addr, size_t len)
释放映射的内存

例子:用mmap将文件映射到内存, 然后用puts打印出来

#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdlib.h>
#include <sys/mman.h> int main(int argc, char *argv[]){
int fdin;
void *src;
struct stat statbuf; if((fdin=open(argv[1],O_RDONLY)) <0)
exit(1);
if(fstat(fdin,&statbuf)<0)
exit(1);
if((src=mmap(0,statbuf.st_size,PROT_READ,MAP_SHARED,fdin,0)) == MAP_FAILED)
exit(1);
puts(src);
return 0;
}

存储映射IO的更多相关文章

  1. 八、文件IO——存储映射

    8.1 存储映射介绍 8.1.1 概念 存储映射是一个磁盘文件与存储空间的一个缓存相映射,对缓存数据的读写就相应的完成了文件的读写. 文件操作部分映射到虚拟内存的一块区域,我们对虚拟内存映射的那块区域 ...

  2. 存储映射--mmap

    存储映射 使一个磁盘文件与存储空间中的一个缓冲区相映射. 当从缓冲区中取数据,就相当于读文件中的相应字节. 将数据存入缓冲区,则相应的字节就自动写入文件. 使用这种方法,首先应通知内核,将一个指定文件 ...

  3. 内存映射IO(MMIO)

    端口I/O 介绍: 一种I/O编址方式是端口映射I/O(port-mapped I/O), CPU使用专门的I/O指令对设备进行访问, 并把设备的地址称作端口号. 在执行其中的一条指令时,CPU使用地 ...

  4. 数据存储与IO(一)

    应用程序沙盒简介:iOS应用程序只能在系统为它分配的文件区域内读写文件,这个区域就是此应用程序的沙盒,Application目录下的GUID文件夹就是沙盒,这个文件夹是系统随机命名的.程序所有的非代码 ...

  5. android学习笔记45——android的数据存储和IO

    android的数据存储和IO SharedPreferences与Editor简介 SharedPreferences保存的数据主要是类似于配置信息格式的数据,因此其保存的数据主要是简单的类型的ke ...

  6. 高级I/O之存储映射I/O

    存储映射I/O(Memory-mapped I/O)使一个磁盘文件与存储空间中的一个缓冲区相映射.于是当从缓冲区中取数据,就相当于读文件中的相应字节.与此类似,将数据存入缓冲区,则相应字节就自动地写入 ...

  7. 【Linux编程】存储映射I/O

    存储映射I/O使一个磁盘文件与存储空间中的一个缓冲区相映射,对缓冲区的读.写操作就是对文件的读.写操作,从而能够不再使用read.write系统调用. 将文件映射到存储区的函数由mmap完毕,函数原型 ...

  8. UNIX环境高级编程——存储映射I/O(mmap函数)

         共享内存可以说是最有用的进程间通信方式,也是最快的IPC形式,因为进程可以直接读写内存,而不需要任何数据的拷贝.对于像管道和消息队列等通信方式,则需要在内核和用户空间进行四次的数据拷贝,而共 ...

  9. 第3章 文件I/O(7)_高级文件操作:存储映射

    8. 高级文件操作:存储映射 (1)概念: 存储映射是一个磁盘文件与存储空间的一个缓存相映射,对缓存数据的读写就相应的完成了文件的读写. (2)mmap和munmap函数 头文件 #include&l ...

随机推荐

  1. iOS开发libWeChatSDK.a(WXApiObject.o)' does not contain bitcode.

    在使用微信分享的时候可能会报错, 报错如下: ld: '/Users/gti/Documents/********/Lib/SDKExport/libWeChatSDK.a(WXApiObject.o ...

  2. js将人民币金额转换为大写

    function upDigit(n) { var fraction = ['角', '分']; var digit = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒' ...

  3. js中判断json是否为空

    var jsonStr ={}; 1.判断json是否为空 jQuery.isEmptyObject(): 2.判断对象是否为空: 1.if   (typeOf(x)   ==   "und ...

  4. Linux与Windows文件传输实现

    Linux与Windows文件传输实现 一.概述 在学习Linux服务器的时候,我们有时需要与Windows下的文件进行交互传输,这个时候我们需要如何实现呢?今天是我第一次在博客园上写文章,此时正值学 ...

  5. hadoop2.6.0+eclipse配置

    [0]安装前的声明 0.1) 所用节点2个 master : 192.168.119.105 hadoop5 slave : 192.168.119.101 hadoop1 (先用一个slave,跑成 ...

  6. 24 MUST HAVE ESSENTIAL LINUX APPLICATIONS IN 2016

    Brief: Whare the must have applications for Linux? The answer is subjective and it depends on for wh ...

  7. https双向认证demo

    阅读此文首先需要具备数据加解密,公钥,私钥,签名,证书等基础知识. 通信服务端:使用tomcat 通信客户端:使用apache httpclient 4.5.1 1. 服务端操作 . keytool ...

  8. LINQ to SQL 语句(2)之 Select/Distinct

    LINQ to SQL 语句(2)之 Select/Distinct [1] Select 介绍 1 [2] Select 介绍 2 [3] Select 介绍 3 和  Distinct 介绍 Se ...

  9. 二维码zxing源码分析(五)精简代码

    由于工作的需要,我并不是需要二维码扫描的所有的功能,我只是需要扫一扫,并显示出来图片和url就行,于是我们就要精简代码了,源码已经分析完了,精简起来就方便多了,源码分析请看 二维码zxing源码分析( ...

  10. Programmer's Jokes

    1.   一天, 下着小雨, 和同事们一起去上班,一位同事差点滑倒,另一位同事笑话说:如果人走路用爬的就不会摔倒了!   遂反问他:能用两行代码搞定的事情为什么要用4行呢? 2.  有趣的公式( Fr ...