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

北京企业网站优化专业网站建设优势

北京企业网站优化,专业网站建设优势,网页网站原型图占位符怎么做,wordpress 4.9 zh cn共享内存 一.原理二.创建共享内存1.shmget2.写一个共享内存代码 三.进行通信1.各种接口2.各接口使用代码3.一次简单的通信四.共享内存的特点 一.原理 直接原理 共享内存顾名思义就是共同使用的一块空间。 很明显操作系统需要对这块内存进行管理#xff0c;那么就避免不了先描… 共享内存 一.原理二.创建共享内存1.shmget2.写一个共享内存代码 三.进行通信1.各种接口2.各接口使用代码3.一次简单的通信四.共享内存的特点 一.原理 直接原理 共享内存顾名思义就是共同使用的一块空间。 很明显操作系统需要对这块内存进行管理那么就避免不了先描述后组织的策略。 二.创建共享内存 1.shmget 申请一块共享内存-shmget 第二个参数创建共享内存的大小单位字节。 第三个参数多个选项 返回值如果成功返回共享内存标识符如果失败返回-1。 操作系统怎么保证不同进程看到同一个共享内存呢怎么知道这块内存是否存在呢 这就需要对第一个参数进行讨论了。 2.写一个共享内存代码 comm.hpp #ifndef __COMM_HPP__ #define __COMM_HPP__ #include iostream #include sys/types.h #include sys/ipc.h #include sys/shm.husing namespace std;const int size4096; const string path/home/chz;//任意写 const int proj_id0x6666;//任意写key_t Getkey()//获取一个key {key_t kftok(path.c_str(),proj_id);if(k0){perror(Create key wrong\n);exit(1);}coutCreate key sucess,key:kendl;return k; }int GetshareMem()//获取一个chmid {key_t kGetkey();int shmidshmget(k,size,IPC_CREAT|IPC_EXCL|0666);//创建方式和权限if(shmid0){perror(Create shmget wrong\n);exit(2);}coutCreate shmget sucess,shmid;shmidendl;return shmid; }#endif前面说过共享内存如果不主动释放会一直存在所以在调用该函数后我们可以使用ipcs -m查看内核的进程资源。 perms是权限nattch是与之相连的文件byte是共享内存大小建议一般按4096的整数倍创建因为系统一次分配的最小内存是4KB。 使用ipcrm -mshmid可以手动删除。 三.进行通信 1.各种接口 将共享内存挂入 第一个参数毫无疑问是共享内存标识符。 第二个参数一般设置为NULL。因为共享内存是在物理内存上要将其挂到虚拟内存的共享区但具体挂到共享区哪个位置一般由操作系统决定。该函数的返回值就是具体的起始地址。 第三个参数一般设为0。它是改变挂接时的权限虽然我们设置的共享内存权限是666但可以通过这个参数让它只读。 取消挂入 控制共享内存 第二个参数要进行什么操作。有许多参数可以自行查看这里使用 IPC_RMID删除该共享内存 第三个参数共享内存的属性。 2.各接口使用代码 processa.cc #includecomm.hpp #include unistd.hint main() {int shmidGetshareMem();sleep(3);char*shmaddr(char*)shmat(shmid,NULL,0);//将共享内存挂入cout挂入内存endl;sleep(3);shdit(shmaddr);//取消挂入cout取消挂入endl;sleep(3);shmctl(shmid,IPC_RMID,nullptr);//销毁共享内存cout销毁共享内存endl;return 0; }3.一次简单的通信 稍微修改一下comm.hpp,主要在shmget当一个进程创建时让另一个进程能获取 #ifndef __COMM_HPP__ #define __COMM_HPP__ #include iostream #include sys/types.h #include sys/ipc.h #include sys/shm.husing namespace std;const int size4096; const string path/home/chz;//任意写 const int proj_id0x6666;//任意写key_t Getkey()//获取一个key {key_t kftok(path.c_str(),proj_id);if(k0){perror(Create key wrong\n);exit(1);}coutCreate key sucess,key:kendl;return k; }int GetShareMemHelper(int flag)//获取一个chmid {key_t kGetkey();int shmidshmget(k,size,flag);//创建方式和权限if(shmid0){perror(Create shmget wrong\n);exit(2);}coutCreate shmget sucess,shmid;shmidendl;return shmid; }int CreateShm() {return GetShareMemHelper(IPC_CREAT|IPC_EXCL|0666); }int GetShm() {return GetShareMemHelper(IPC_CREAT); }#endifprocessa.cc #includecomm.hpp #include unistd.hint main() {int shmidCreateShm();//创建共享内存//挂入内存//获取起始地址并把它当作字符串使用char*shmaddr(char*)shmat(shmid,nullptr,0);while(true){//直接读取coutI am read:;coutshmaddrendl;sleep(1);}shmdt(shmaddr);//取消挂起shmctl(shmid,IPC_RMID,nullptr);return 0; }processb.cc #includecomm.hppint main() {int shmidGetShm();//获取共享内存//挂入内存//获取起始地址并把它当作字符串使用char*shmaddr(char*)shmat(shmid,nullptr,0);while(true){coutplease Enter:;fgets(shmaddr,4096,stdin);//直接从键盘读入}return 0; }makefile .PHONY:all all:processa processbprocessa:processa.ccg -o $ $^ -stdc11 processb:processb.ccg -o $ $^ -stdc11.PHONY:clean clean:rm -f processa processb四.共享内存的特点 1.共享内存没有同步互斥之类的保护机制。即使没有写入也依然会读 2.共享内存是所有的进程通信中最快的。拷贝少 3.共享内存里的所有数据由用户自己维护。操作系统不会自动将数据清零
http://www.sadfv.cn/news/31949/

相关文章:

  • 如何撤销网站上信息万脑网站建设
  • 深圳哪里有可以做网站跳转的公司wordpress d9
  • 哈尔滨住房城乡建设局网站可画在线设计网站
  • 南桥网站建设网页设计师作品集
  • 石家庄网站设计工作室网上如何推广自己的产品
  • 惠州住房和城乡建设厅网站怎样创建网站根目录
  • dz可以做旅游网站吗广西建设厅官网站
  • 外贸网站域名赏析上饶哪里培训网站建设
  • 网站备案接入商dw做网站背景图片设置
  • 网站及其建设的心得体会将公司网站建设成
  • 怎么上传图片到公司网站网站建设 技术团队
  • 绿植租摆网站建设wordpress 预缓存
  • 建立网站费用较低建设工程资讯哪个网站好
  • 模板手机网站建设多少钱wordpress 加载流程
  • sdcms网站源码多平台发布工具
  • 专业江西网站建设一亩田的网络营销方式
  • 上海做网站建设的公司网站建设中网站需求分析报告
  • 深圳网站建设便捷福州市城乡建设局
  • 网站建设维护是啥意思做的好的国外网站
  • 怎么做自己地网站深圳高端响应式网站
  • 头像网站模板济南手机网站建设公司报价
  • 电子商务网站建设报告如何屏蔽百度广告推广
  • 惠州网站制作找哪家关于加强政务网站建设的通知
  • 注册网站不用手机短信验证的六安网络推广公司
  • 外贸最大电子元器件交易网站网站后台关键词设置
  • 网络运维网站seo指的是什么意思
  • 微商城网站建设咨询佛山网站
  • 做食品网站有哪些内容制作网页最多的图片格式
  • 网站自己推广做百科的网站
  • 怎么用vs2017做asp网站网站微信推广怎么做