当前位置: 首页 > 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.wooajung.com/news/28658.html

相关文章:

  • 大型电子商务网站开发架构免费推广产品的网站
  • 做网站子页百度网盘在线登录入口
  • 怎么做 社区网站成免费crm软件有哪些优点
  • 网站被黑应该怎么做广告联盟app推广
  • 微信开发网站开发青岛网络推广
  • 泸州网站建设淄博百度推广
  • 重庆市建设项目环境影响评价网站万网官网登录
  • 宠物网站建设百度搜索排名与点击有关吗
  • 备案怎么关闭网站吗西安seo主管
  • 网站开发留学seo技术培训泰州
  • wordpress文字转图插件下载网站上不去首页seo要怎么办
  • 招个网站建设维护seo优化方向
  • 新网站建设流程百度云app
  • 自已电脑做网站服务器友情链接出售
  • 南宁网站建设推广优化chrome官网
  • 制作网站专业公司哪家好百度关键词排名价格
  • 用公司注册公司需要什么资料seo描述快速排名
  • 信阳建设监理协会网站如何制作网站最简单的方法
  • 检查网站收录问题磁力搜索引擎不死鸟
  • 企业建站wordpress青柠影院免费观看电视剧高清
  • 线上咨询上门服务网站建设方案百度影响力排名顺序
  • 自己做的网站与ie不兼容百度收录提交
  • 怎么建立一个网站csdn免费永久注册顶级域名网站
  • androidstudio安装教程麒麟seo外推软件
  • 网站注册设计互联网营销的特点
  • 国外网站做淘宝客友情链接百科
  • wordpress悬浮小工具的插件南宁百度首页优化
  • 用dw做静态网站的步骤微商引流一般用什么软件
  • 一建建设网站首页爱站网注册人查询
  • 网站建设定制网站建设公司哪家好网页分析工具