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

做外贸a货网站小程序运营推广公司

做外贸a货网站,小程序运营推广公司,做网站除了dw,做一个网站内存映射概念: 共享内存可以通过mmap()映射普通文件使一个磁盘文件与内存中的一个缓冲区相映射,进程可以像访问普通文件一样对文件进行访问,不必再强调read,write。 mmap的优点: 实现了用户空间和内核空间的高效交互方式 mmap的…

内存映射概念:

  • 共享内存可以通过mmap()映射普通文件
  • 使一个磁盘文件与内存中的一个缓冲区相映射,进程可以像访问普通文件一样对文件进行访问,不必再强调read,write。

mmap的优点:

  • 实现了用户空间和内核空间的高效交互方式

 

mmap的示例:

 函数定义:

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

功能:创建共享内存映射

函数返回值:成功返回创建的映射区首地址,失败返回MAP_FAILED(((void*)-1)),设置errno值


参数说明

addr:指定要映射的内存地址,一般设置为NULL让操作系统自动选择合适的内存地址。

length:必须>0,映射地址空间的字节数,它从被映射文件开头offset个字节开始算起。

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表示从文件头部开始映射。


注意事项

(1)创建映射区的过程中,隐含着一次对映射文件的读操作,将文件内容读取到映射区。

(2)当MAP_SHARED时,要求:映射区的权限应<=文件打开的权限(出于对映射区的保护),如果不满足报非法参数(Invalid argument)错误。

(3)映射区的释放与文件关闭无关,只要映射建立成功,文件可以立即关闭。

(4)用于映射的文件大小必须>0,当映射文件为0时,指定非0大小创建映射区,访问映射地址会报总线错误,指定0大小创建映射区,报非法参数错误(Invalid argument)

(5)文件偏移量必须为0或者4K的整数倍(不是会报非法参数(Invalid argument)错误)。

(6)映射大小可以大于文件大小,但只能访问文件page的内存地址,否则报总线错误,超出映射的内存大小报段错误。


(6)的解释:

假如文件大小为37字节,即文件test为37字节大小,通过mmap申请2K内存,系统是可以访问3K的内存的,因为文件小于4K的话一次最少分配4K内存,如果访问5K的(报段错误)。但是如果申请6K内存,则5K的内存不能访问(报总线错误),因为系统会根据test文件的大小分配内存,此时也是只会分配4K。

示例代码:

#include <stdio.h>
#include <sys/mman.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>int main()
{void *addr;int fd;fd = open("test",O_RDWR);if (fd < 0){perror("open");return 0;}addr = mmap(NULL,100,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0);if (addr == MAP_FAILED){perror("mmap");return 0;}// memcpy(addr,"abcdefg",7);printf("read=%s\n",(char*)addr);
}

将文件test进行映射,修改test内容,就会映射文件内容

两个进程通过共享内存进行通信:

mmap_w.c

#include <stdio.h>
#include <sys/mman.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>int main()
{void *addr;int fd;fd = open("test",O_RDWR);if (fd < 0){perror("open");return 0;}addr = mmap(NULL,2048,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0);if (addr == MAP_FAILED){perror("mmap");return 0;}close(fd);int i = 0;while (i < 2048){memcpy((addr+i),"a",1);i++;sleep(1);}return 0;// memcpy(addr,"abcdefg",7);// printf("read=%s\n",(char*)addr);
}

mmap_r.c

#include <stdio.h>
#include <sys/mman.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>int main()
{void *addr;int fd;fd = open("test",O_RDWR);if (fd < 0){perror("open");return 0;}addr = mmap(NULL,100,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0);if (addr == MAP_FAILED){perror("mmap");return 0;}while (1){printf("read=%s\n",(char*)addr);sleep(1);}return 0;// memcpy(addr,"abcdefg",7);}

向test文件映射的共享内存,一秒写一个a,然后一秒读一次

匿名映射mmap_n.c

#include <stdio.h>
#include <sys/mman.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>#include <sys/types.h>
#include <sys/stat.h>
#include <sys/wait.h>#include <fcntl.h>int main()
{void *addr;addr = mmap(NULL,2048,PROT_READ|PROT_WRITE,MAP_SHARED|MAP_ANONYMOUS,-1,0);if (addr == MAP_FAILED){perror("mmap");return 0;}pid_t pid;pid = fork();if (pid < 0){perror("fork");}else if (pid > 0){memcpy(addr,"1234567890",10);wait(NULL);//回收子进程}else{sleep(1);printf("read father val= %s\n",(char *)addr);}//释放共享内存munmap(addr,2048);return 0;// memcpy(addr,"abcdefg",7);// printf("read=%s\n",(char*)addr);
}

运行结果:

http://www.dinnco.com/news/72770.html

相关文章:

  • 浙江省建设厅官方网站信用平台互联网营销师证书是国家认可的吗
  • 做网站大图素材网站怎样才能在百度被搜索到
  • 重庆万州网站建设公司电话什么叫关键词
  • 安阳网站制作上海抖音推广
  • 国外优秀建筑设计网站seo工具大全
  • 021新手学做网站b站推广引流最佳方法
  • 免费推广平台整理seo优化sem推广
  • 郑州动力无限网站建设seo技术介绍
  • 深圳建设网站的公司哪家好营销型网站建设的5大技巧
  • 网站建设要哪些人?军事新闻最新
  • 江西电信网站备案怎么恶意点击对手竞价
  • 营口做网站的公司网络营销类型
  • 泰州建设工程信息网优化电脑的软件有哪些
  • 松岗做网站公司2023年百度小说风云榜
  • 有没有免费做企业网站的画质优化app下载
  • 石家庄做标书的网站百度一下京东
  • 男女直接做性视频网站宣传推广的形式有哪些
  • 网站用什么做关键词seo网站建设优化
  • 哪个网站做新加坡劳务比较好的百度的人工客服电话
  • 网站推广推广百度新闻搜索
  • 网络营销策划课程手机优化管家
  • 专业做毕业设计网站设计福州短视频seo机会
  • 虚拟主机免费试用seo常用的工具
  • 全运会网站建设方案宁波seo外包方案
  • 网站做竞价优化微信营销软件手机版
  • 电子商务网站建设技术怎样进行seo
  • 项目网上备案流程唐山seo优化
  • wordpress id乱码嘉兴seo外包公司费用
  • 祥云平台做网站好不好百度链接地址
  • 企业网站风格外链群发平台