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

网站地图做计划任务今日全国疫情最新消息

网站地图做计划任务,今日全国疫情最新消息,企业网站代码模板,太原有网站工程公司吗mmap内存映射 内存共享定义 内存映射,简而言之就是将用户空间的一段内存区域映射到内核空间,映射成功后,用户对这段内存区域的修改可以直接反映到内核空间,同样,内核空间对这段区域的修改也直接反映用户空间。那么对…

mmap内存映射

内存共享定义

内存映射,简而言之就是将用户空间的一段内存区域映射到内核空间,映射成功后,用户对这段内存区域的修改可以直接反映到内核空间,同样,内核空间对这段区域的修改也直接反映用户空间。那么对于内核空间<---->用户空间两者之间需要大量数据传输等操作的话效率是非常高的。

以下是一个把普遍文件映射到用户空间的内存区域的示意图
在这里插入图片描述

mmap内存映射方法

mmap是一种内存映射文件的方法,即将一个文件或者其它对象映射到进程的地址空间,实现文件磁盘地址和进程虚拟地址空间中一段虚拟地址的一一对映关系。
实现这样的映射关系后,进程就可以采用指针的方式读写操作这一段虚拟内存,而系统会自动回写到对应的文件磁盘上,即完成了对文件的操作而不必再调用read,write等系统调用函数。
相反,内核空间对这段区域的修改也直接反映用户空间,从而可以实现不同进程间的文件共享。如下图所示:
在这里插入图片描述

void *mmap(void *start, size_t length, int prot, int flags, int fd, off_t offset);

参数说明:
参数start:指向欲映射的内存起始地址,通常设为 NULL,代表让系统自动选定地址,映射成功后返回该地址。
参数length:代表将文件中多大的部分映射到内存。
参数prot:映射区域的保护方式。可以为以下几种方式的组合:

PROT_READ(可读)
PROT_WRITE(可写)
PROT_EXEC(可执行)
PROT_NONE(不可访问)

参数flags:由以下几个常值指定:

MAP_SHARED(共享的)
MAP_PRIVATE(私有的)
MAP_FIXED(表示必须使用 start 参数作为开始地址,如果失败不进行修正)
其中,MAP_SHARED , MAP_PRIVATE必选其一,而 MAP_FIXED 则不推荐使用。MAP_ANONYMOUS(匿名映射,用于血缘关系进程间通信)

参数fd:表示要映射的文件句柄。如果匿名映射写-1。
参数offset:表示映射文件的偏移量,一般设置为 0 表示从文件头部开始映射。offset必须是分页大小的整数倍(一般是4096的整数倍)。

写共享文件

#include"stdio.h"
#include"unistd.h"
#include"string.h"
#include"fcntl.h"
#include"sys/mman.h"
#include"sys/stat.h"
#include"stdlib.h"
#include"sys/types.h"
int main(int agrc,char* agrv[])
{int len;int fd;void* map;fd = open("1.txt",O_RDWR);if(fd<0){perror("open");return -1;}len = lseek(fd, 0, SEEK_END); printf("%d\n",len);map = mmap(NULL,len,PROT_WRITE,MAP_SHARED,fd,0);if(map == MAP_FAILED){perror("mmap");return -1;}for(int i=0;i<5;i++){memcpy(map++, "b", 1);}return 0;
}

读共享文件

#include"stdio.h"
#include"unistd.h"
#include"string.h"
#include"fcntl.h"
#include"sys/mman.h"
#include"sys/stat.h"
#include"stdlib.h"
#include"sys/types.h"
int main(int agrc,char* agrv[])
{int len;int fd;void* map;fd = open("1.txt",O_RDWR);if(fd<0){perror("open");return -1;}len = lseek(fd, 0, SEEK_END); map = mmap(NULL,len,PROT_READ,MAP_SHARED,fd,0);if(map == MAP_FAILED){perror("mmap");return -1;}while (1) {printf("%s\n",(char*)map);}return 0;
}

mmap内存映射注意事项

(1) 创建映射区的过程中,隐含着一次对映射文件的读操作,将文件内容读取到映射区。
(2) 当MAP_SHARED时,要求:映射区的权限应 <= 文件打开的权限(出于对映射区的保护),如果不满足报非法参数(Invalid argument)错误。
当MAP_PRIVATE时候,mmap中的权限是对内存的限制,只需要文件有读权限即可,操作只在内存有效,不会写到物理磁盘,且不能在进程间共享。
(3) 映射区的释放与文件关闭无关,只要映射建立成功,文件可以立即关闭。
(4) 用于映射的文件大小必须>0,当映射文件大小为0时,指定非0大小创建映射区,访问映射地址会报总线错误,指定0大小创建映射区,报非法参数错误(Invalid argument)
(5) 文件偏移量必须为0或者4096的整数倍(不是会报非法参数Invalid argument错误).
(6)映射大小可以大于文件大小,但只能访问文件page的内存地址,否则报总线错误 ,超出映射的内存大小报段错误.

在这里插入图片描述

system V共享内存

使用system V共享内存的步骤

1、创建/打开共享内存。
2、映射共享内存,即把指定的共享内存映射到进程的地址空间用于访问。
3、读写共享内存。
4、撤销共享内存映射。
5、删除共享内存对象。

相关API

//共享内存创建
int shmget(key_t key, int size, int shmflg);
//共享内存映射
void  *shmat(int shmid, const void *shmaddr, int shmflg);
//共享内存撤销,撤销后内存地址不可再访问
int  shmdt(void *shmaddr);
//共享内存控制
int  shmctl(int shmid, int cmd, struct shmid_ds *buf);
shmctl(shmid, IPC_RMID, NULL);删除共享内存

写数据

#include<stdio.h>
#include"stdlib.h"
#include"unistd.h"
#include"sys/types.h"
#include"string.h"
#include"sys/stat.h"
#include"sys/shm.h"
#include"sys/ipc.h"
int main(int agrc,char* agrv[])
{key_t key;int shimd;void* shmaddr;key = ftok("2.txt", 100);printf("key = %d\n",key);if(key == -1){perror("key");return -1;}shimd = shmget(key, 512, IPC_CREAT|0666);printf("shimd = %d\n",shimd);if(shimd == -1){perror("get");return -1;}shmaddr = shmat(shimd, NULL, 0);strcpy(shmaddr, "hello,world!");sleep(1);return 0;
}

读数据

#include<stdio.h>
#include"stdlib.h"
#include"unistd.h"
#include"sys/types.h"
#include"string.h"
#include"sys/stat.h"
#include"sys/shm.h"
#include"sys/ipc.h"
int main(int agrc,char* agrv[])
{key_t key;int shimd;void* shmaddr;key = ftok("2.txt", 100);if(key == -1){perror("key");return -1;}shmaddr = shmat(32811, NULL, 0);printf("%s\n",(char*)shmaddr);shmdt(shmaddr);sleep(1);return 0;
}
http://www.yidumall.com/news/91294.html

相关文章:

  • 永春县建设局网站学生个人网页制作教程
  • pc网站 手机网站 微网站十大网络营销经典案例
  • 网站做直链下载存储解决方案seo教程视频
  • 黑龙江 网站开发好的竞价账户托管外包
  • 怎样做电商网站的财务分析国外b站视频推广网站
  • 东南亚做网站 什么语言网址查询服务器地址
  • 公司网站怎么做简介社群营销是什么意思
  • 郑州网站建设如何百度推广开户怎么开
  • wordpress子页面不显示不出来seo点击排名软件哪家好
  • 国外精彩网站bing搜索引擎国际版
  • 做网站什么语言成都纯手工seo
  • wordpress制作网站步骤ip域名查询地址
  • 公司网站改版网站做优化
  • 做卡盟网站教程网站优化流程
  • 做毕业设计个人网站任务书网站seo优化教程
  • 西安网站建设-中国互联专注于网站营销服务
  • Net网站开发多少钱营销服务机构
  • 建筑行业网站有哪些网站推广的方式有
  • 网站wap怎么做网络营销的概念和特点
  • 天气网站建设2021年关键词排名
  • 给企业做网站推广好么站长工具seo综合查询下载
  • 仓库管理erp自学视频东莞seo代理
  • 东城东莞网站建设整站优化工具
  • 买到一个域名以后如何做网站如何推广自己的微信公众号
  • 江西疫情最新情况最新消息关键词优化如何做
  • 宠物网站建设的目的百度网页入口
  • 网站的开发语言百度问答
  • 仿webqq织梦管理网站后台模板百度统计工具
  • 灰色网站怎么做哪家竞价托管专业
  • 做网站运营需要什么证百度官网网站首页