您的位置:首页 > 汽车 > 新车 > 百度网页游戏中心_产品策划方案怎么做_厦门人才网官方网站_app开发网站

百度网页游戏中心_产品策划方案怎么做_厦门人才网官方网站_app开发网站

2024/11/14 7:45:17 来源:https://blog.csdn.net/weixin_51253120/article/details/142892461  浏览:    关键词:百度网页游戏中心_产品策划方案怎么做_厦门人才网官方网站_app开发网站
百度网页游戏中心_产品策划方案怎么做_厦门人才网官方网站_app开发网站

在这里插入图片描述

文章目录

  • 磁盘映射
    • 相关函数
      • mmap函数
        • 作用:
      • munmap函数
        • 作用:
      • truncate 函数
        • 作用:
      • 语法:
      • 使用步骤:

磁盘映射

概述:

> 存储映射 I/O (Memory-mapped I/O) 使一个磁盘文件与存储空间中的一个缓冲区相映射。
于是当从缓冲区中取数据,就相当于读文件中的相应字节。
于此类似,将数据存入缓冲区,则相应的字节就自动写入文件。
这样,就可在不使用 read 和write 函数的情况下,使用地址(指针)完成 I/O 操作。
使用存储映射这种方法,首先应通知内核,将一个指定文件映射到存储区域中。这个映射工作可以通过mmap函数来实现。

优点:

相对于文件的读写,速度较快

相关函数

mmap函数

作用:

​ 建立映射

#include <sys/mman.h>void *mmap(void *addr, size_t length, int prot, int flags,int fd, off_t offset);参数:1 addr:  生成的映射的地址,填NULL  因为你自己写的可能地址不够大 给NULL 让系统自动找合适的地址2 length:开启的内存大小3 port:权限PROT_READ  :可读PROT_WRITE :可写4 flags:标志位MAP_SHARED 共享的 -- 对映射区的修改会影响源文件  【基本就用这个】MAP_PRIVATE 私有的5 fd: 映射的文件的文件描述符6 offset: 偏移量,  【一般写0】返回值:开启的映射的首地址

munmap函数

作用:

​ 释放映射

#include <sys/mman.h>
int munmap(void *addr, size_t length);参数:1 addr: 要释放的映射的地址2 length: 释放的长度   不是内存没了 只是断开连接//    注意:  该函数只是断开了 该进程与映射区之间 的 链接

truncate 函数

注意:

如果文件大小 大于 扩展部分 则会删除 多出部分

要是 文件大小 小于 扩展部分 就扩展

也就是说 扩展的时候 给大扩 扩小了 要比你的文件大小 还小 就删你文件了

作用:

扩展内存

语法:

int truncate(const char *path, off_t length);
参数:path:文件地址length:长度

使用步骤:

  • 1 ,打开文件获取文件描述符
  • 2,扩展映射的缓存区大小
  • 3 , 建立映射
  • 4 , 读或写
  • 5 , 断开映射

写入:

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/mman.h>
#include <string.h>
#define BUFFSIZE 5 // 磁盘映射 写入
int main(int argc, char const *argv[])
{// - 1 ,打开文件获取文件描述符int fd = open("./tt.txt", O_CREAT | O_RDWR, 0666);// - 2,扩展映射的缓存区大小truncate("tt.txt", BUFFSIZE);// - 3 , 建立映射char *buf =(char *)mmap(NULL, BUFFSIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);// - 4 ,写入char *str = "hello";strcpy(buf, str);// - 5 , 断开映射munmap(buf, BUFFSIZE);return 0;
}
// 优势  不用 read write

读取:

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/mman.h>
#include <string.h>
#define BUFFSIZE 5
//    磁盘映射 读取
int main(int argc, char const *argv[])
{// - 1 ,打开文件获取文件描述符int fd = open("./tt.txt", O_CREAT | O_RDWR, 0666);// - 2,扩展映射的缓存区大小truncate("tt.txt", BUFFSIZE);// - 3 , 建立映射char *buf = (char *)mmap(NULL, BUFFSIZE, PROT_READ , MAP_SHARED, fd, 0);// - 4 , 读printf("buf = %s\n",buf); // - 5 , 断开映射munmap(buf, BUFFSIZE);return 0;
}// 优势  不用 read write

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com