当前位置: 首页 > news >正文

赣州建设局网站十大招商平台

赣州建设局网站,十大招商平台,电脑浏览器打不开网页,远程wordpress数据库学习这篇博客#xff0c;进行了一些归纳Linux下mmap_linux mmap_一个山里的少年的博客-CSDN博客https://blog.csdn.net/qq_56999918/article/details/127070280 读取文件 读取文件方法#xff1a;由操作系统提供的两个方法#xff0c;read和write来读写文件。 由… 学习这篇博客进行了一些归纳Linux下mmap_linux mmap_一个山里的少年的博客-CSDN博客https://blog.csdn.net/qq_56999918/article/details/127070280 读取文件 读取文件方法由操作系统提供的两个方法read和write来读写文件。 由于read和write是系统调用需要先从用户态进入到内核态再将磁盘中的数据拷贝到操作系统的缓冲区中然后再将缓冲区中的数据拷贝到用户态中这个过程进行了两次拷贝。 mmap ① memory map:是一种内存映射文件的方法。 ② mmap是一个可以将一个文件或者其他对象映射到进程的地址空间实现磁盘的地址和进程虚拟地址空间一段虚拟地址的一一对应关系。 ③ mmap系统调用可以让进程之间通过映射到同一个普通文件实现共享内存普通文件被映射到进程地址空间当中之后进程可以向访问普通内存一样对文件进行一系列操作。 【总结】 ① 日常中使用read或者write需要进行两次拷贝一次是将文件拷贝到内核缓冲区一次是从内核缓冲区拷贝到用户缓冲区。 ② 使用mmap可以减少第二次拷贝由于内核将文件映射到内存之后用户进程就可以操作这些数据了用户进程只需要修改内核中的内容接着通过内核的内存管理器自动将这些数据刷新到磁盘当中。 ③ mmap可以提高内存性能内核空间和用户空间共用一个缓冲区当多个进程正在对同一个文件进行IO操作那么通过使用mmap能够共享一个内核缓冲区从而可以减少内存消耗。 用户态中的mmap函数以及相关参数详解 mmap的使用#include sys/mman.hvoid *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset);函数说明创建虚拟内存到物理内存或者文件的映射参数- addr映射区的起始地址如果是NULL系统自动分配- length字节长度自动按照4KB对齐建议大小一般填成4KB的整数倍- prot映射区域的权限- flags映射的标志位- fd文件描述符- offset文件偏移量自动按照4KB对齐prot 的取值PORT_EXEC:映射的区域具有可执行权限PROT_READ:映射的区域具有可读权限PROT_WRITE:映射区域具有可写权限PROT_NONE:映射区域不可被访问对应flags的取值MAP_SHARED:对映射区域的写入操作直接反映到文件中MAP_FIXED:若在start上无法创建映射则失败如果没有此标记会自动创建MAP_PRIVATE:对映射区域的写入操作只反映到缓冲区当中不会写入到真正的文件MAP_ANONYMOUS:匿名映射将虚拟地址映射到物理内存而不是文件忽略fd)MAP_DENYWRITE:拒绝其它文件的写入操作MAP_LOCKED:锁定映射区域保证其不被置换返回值函数的返回值为最后文件映射到进程空间的地址进程可直接操作起始地址为该值的有效地址 内核态中的mmap函数 int mmap(struct file* filp,struct vm_area_struct* vma), 用户态的mmap函数实现映射到物理内存 #include iostream #include sys/mman.h #include cstring #include cerrno #include cstdio using namespace std; static const int SIZE 4096; int main() {char *str (char *)mmap(NULL, SIZE, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, 0, 0);//注意MAP_PRIVATE和MAP_SHARED//建立映射if (str MAP_FAILED){printf(%s\n, strerror(errno));return -2;}strcpy(str, hello ksy);puts(str);//用于取消映射munmap(str, SIZE);return 0; } 用户态的mmap函数实现映射到文件 #include iostream #include sys/mman.h #include cstring #include cerrno #include cstdio #include sys/types.h #include sys/stat.h #include fcntl.h #include unistd.h using namespace std; static const int SIZE 4096; int main() {int fd open(./a.txt, O_RDWR | O_CREAT, 0644);truncate(a.txt, 1024);if (fd 0){printf(%s\n, strerror(errno));return -1;}char *str (char *)mmap(NULL, SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);//注意MAP_PRIVATE和MAP_SHARED//建立映射if (str MAP_FAILED){printf(%s\n, strerror(errno));close(fd);return -2;}strcpy(str, helloworld);close(fd);return 0; } 【注意】 如果不加truncate(a.txt, 1024);会出现总线错误 (核心已转储) 【原因】mmap是虚拟内存映射到文件物理内存。由于heheda.txt是新创建的也就是0个字节。那么在映射时候也是映射了0个字节这个文件映射过来的内存是没有的所以我们往里面写东西就会崩溃truncate函数对文件提前处理一下 int truncate(const char *path, off_t length); 函数说明truncate()会将参数path指定的文件大小改为参数length指定的大小。 如果原来的文件大小比参数length大则超过的部分会被删除。可以提前使用这个函数提前将文件的大小进行设置就可以向映射的这块内存进行写入了。也就可以成功将其写入到文件中了
http://www.hkea.cn/news/14587935/

相关文章:

  • 一个好网站建设wordpress怎么添加ga统计
  • 做oa系统的网站做网站商业欺骗赔多少
  • 网站开发软件开发流程国内免费云主机
  • 学校网站制作htmlwordpress在哪编辑模板
  • 桂林市建设工程质量监督站网站企业crm软件
  • 大数据网站建设建设公共网站的目的
  • 一起做网店网站打不开河南如何建网站要什么条件
  • 怎么在云主机上做网站wordpress 调用 编辑器
  • 网站手机端打不开常州网站建设大全
  • 企业只有建立了自己的网站怎么做一元购网站
  • 舟山大昌建设集团网站品牌网站建设 意义
  • 微商城app开发网站怎么优化 优帮云
  • 网站优化软件方案塘厦镇网站建设公司
  • 山东省建设机械协会网站中国核工业二三建设有限公司怎么样
  • 网站建设数据库的购买最近热搜新闻事件
  • 水果网站怎么做苏州住建
  • 常德网站网站建设企业营业执照查询网上查询
  • 网站数据分析表格做电影网站怎么赚钱
  • 天河建设网站设计红酒论坛网站建设
  • 云建站系统前三名wordpress搜索增强
  • 镇江网站制作服务做3d图的网站有哪些软件有哪些
  • 大的网站建设公司正邦设计公司简介
  • 国内广告公司威海优化推广
  • 做网站用什么字体网站做程序
  • 有哪些做兼职的设计网站有哪些工作大叔 wordpress
  • 通过阿里云建设企业网站莱芜网站建设哪家好
  • 中高端社交网站建设服务商网站开发税收分类
  • 做网站好还是做微信小程序好站长之家ip地址查询
  • 注册个网站域名多少钱网络空间安全考研学校排名
  • 做网站怎么搭建环境兰州网络推广方向