zoukankan      html  css  js  c++  java
  • 内存映射文件

      

    内存映射文件的概念:

    通过内存映射函数,可以将磁盘文件全部或者部分映射到虚拟地址空间,一旦完成,对磁盘文件的访问,就可以像对内存文件一样便捷。通过该区域可以直接对被映射的磁盘文件进行访问.而不必执行文件I/O操作也无需对文件内容进行缓冲处理。就好像整个被映射的文件都加载到了内存一样,因此内存文件映射非常适合于用来管理大文件。

    内存映射文件的用途:

    系统用内存映射文件加载和执行EXE,DLL文件,既节省了page file的空间,又加快了程序的执行。

    用内存映射文件机制访问文件遮蔽了对文件I/O操作和文件内容的缓存操作。

    它是最有效的进程通信机制,其他的进程通信都基于内存文件映射。

    原型: void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offsize);

    内存映射的步骤:

      用open系统调用打开文件, 并返回描述符fd.

      int open(const char *pathname, int flags);

           int open(const char *pathname, int flags, mode_t mode);

                name是文件名字,可以是绝对路径,也可是相对路径

                flag,文件属性.O_RDONLY,O_WRONLY ,O_RDWR,O_CREAT,O_EXCL 

                mode 权限码

      int fstat(int filedes, struct stat *buf);


          fstat执行成功后,stat.st_size即是文件尺寸.

      用mmap建立内存映射, 并返回映射首地址指针start.

       void *mmap(void *start, size_t length, int prot, int flags,

                      int fd, off_t offset);

     

              start是表示开始映射的物理地址,如果为NULL表示由内核自行选择合适空间来分配。
              length是内存的大小,一般是和第二步的同一大小。

              prot 是共享内存属性。它有如下值

                     PROT_EXEC 分配空间可执行

                     PROT_READ 分配空间可读

                     PROT_WRITE 可写

                     PROT_NONE 禁止访问,一般为省事,都设为  PROT_READ|PROT_WRITE

              flags 是共享内存的标志位,它有如下取值

                     MAP_FIXED ,内存固定大小,不能超过一页。如果超过将mmap失败.

                      MAP_SHARED ,在多个进程间共享这一内存

                      MAP_PRIVATE, 只供本进程使用。

     

      对映射(文件)进行各种操作, 显示(printf), 修改(sprintf).

      

      用munmap(void *start, size_t lenght)关闭内存映射.

      int munmap(void *start, size_t length);

       

      用close系统调用关闭文件fd.

      在内存映射中存盘

        int msync(void *start, size_t length, int flags);
         msync是不用解除内存映射的情况下,把内存文件保存到磁盘上。
     
     
     
     
     
  • 相关阅读:
    [C/C++开发] Clion利用Docker开发和调试PHP扩展
    [C/C++开发] Clion利用Docker开发和调试PHP内核
    [C/C++开发] Clion利用Docker开发和调试Linux C/C++程序
    [Docker] 使用ubuntu涉及时区问题
    Oracle 导入 SQL 文件
    转载
    微信小程序
    微信小程序-点击复制功能
    服务器端基础概念
    VSCode 同步设置插件
  • 原文地址:https://www.cnblogs.com/Huayuan/p/2458596.html
Copyright © 2011-2022 走看看