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

asp网站建设中期报告网站建设创客

asp网站建设中期报告,网站建设创客,客户资源网,深圳哪家网页设计好概念 我们知道进程间的通信有管道的方式进程通信管道制作_云的小站的博客-CSDN博客 但是我们的管道通信其实属于一种取巧的方式#xff0c;利用了打开的文件可读写的特性上#xff0c;两个进程对此分别进行读写操作就会产生所谓的通信现象#xff0c;但是外面的管道依旧得…概念 我们知道进程间的通信有管道的方式进程通信管道制作_云的小站的博客-CSDN博客 但是我们的管道通信其实属于一种取巧的方式利用了打开的文件可读写的特性上两个进程对此分别进行读写操作就会产生所谓的通信现象但是外面的管道依旧得再磁盘上创建一个文件然后文件打开加载在内存上才可以使用那么有什么方法可以直接加载在内存而无需对磁盘操作呢 ---------利用systemV共享内存通信 利用系统函数shmget在内存中开辟一块空间用于进程通信的交互点。因为两个进程之间不可以直接通信所以需要加一个中间层。 学计算机当两个东西不通的时候我们最经常干的事情就是加一个中间层既保护了独立性又处理了我们需要完成的事情 工具 shmget创建共享内存 shmid_t shmget(key_t key, size_t size, int shmflg);返回值 失败返回-1成功返回一个shmid唯一的共享内存标识符。 key 唯一值两个进程需要同一个key值才可以访问到同一共享内存空间。 size 设置共享内存大小 shmflg 共享内存创建选项IPC_CREAT | IPC_EXCL|0666  IPC_CREAT:如果内存存在key标识符的共享内存直接使用如果不存在就创建 IPC_EXCL:如果内存存在key标识符的共享内存直接失败退出。 0666共享内存的使用权限。 shmctl操作共享内存 int shmctl(int shmid, int cmd, struct shmid_ds *buf);返回值 如果操作成功返回0操作失败返回-1 shmid 对该shmid的共享内存进行操作 cmd 对共享内存的操作选项一般我们删除共享内存用的使用IPC_RMID buf 获取该共享内存的数据结构地址。共享内存也需要被描述组织。 shmat进程的挂接操作 void *shmat(int shmid, const void *shmaddr, int shmflg); 返回值 成功返回共享内存的地址失败返回-1并设置errno错误原因。 shmid 挂接在shmid标识符的共享内存上。 shmaddr 理论上可以自己设置将共享内存挂接在自己指定的位置但是不建议。所以一般设置为nullptr shmflg 设置访问方式只读、只写等等。设置为0读写操作。 shmdt进程的拆除操作 int shmdt(const void *shmaddr); 返回值 成功拆除返回0失败返回-1 shmaddr 将进程地址空间shmaddr的共享内存进行拆除。 ftok生成一个key值为shmget服务 key_t ftok(const char *pathname, int proj_id); 返回值 返回有个随机数字。 pathname 传一个文件路径使用文件的inode值对了文件必须要有访问权限。 proj_id: 项目id0~255其实可以随便写会截断。 psftok不进行系统调用他只是一个算法 代码 来来来工具说完了直接上代码 头文件 日志需要的接口 日志 1 #ifndef _LOG_H_2 #define _LOG_H_3 #include ctime4 #include iostream5 6 #define Debug 07 #define Notice 18 #define Warning 29 #define Error 310 11 std::string mgs[] {12 Debug,13 Notice,14 Warning,15 Error};16 17 std::ostream Log(std::string message, int level)18 {19 std::cout | (unsigned)time(nullptr)20 | mgs[level] | message;21 return std::cout; 22 }23 24 #endif ~所需头文件 1 #pragma once 2 #includeiostream3 #includecstdio4 #includesys/shm.h5 #includesys/ipc.h6 #includesys/types.h7 #includeLog.hpp8 #includeassert.h9 #includeunistd.h10 using namespace std;11 #define SIZE 409612 #define PATH_NAME .13 #define PROJ_ID 0x6614 15 16 string TransToHex(key_t k)17 {18 char buffer[32];19 snprintf(buffer,sizeof(buffer),0x%x,k);20 return buffer;21 }接收方代码 #includecomm.hpp2 3 int main()4 {5 // 1.创建公共key6 key_t kftok(PATH_NAME,PROJ_ID);7 assert(k!-1);8 Log(create key done,Debug) sgmrevice key: TransToHex(k)endl;9 sleep(10);10 //2.创建共享内存11 12 int shmid shmget(k,SIZE,IPC_CREAT | IPC_EXCL|0666 );13 if(shmid-1)14 {15 perror(shmger fail!!\n);16 exit(-1);17 }18 19 Log(create shm done,Debug) sgmrevice shmid: shmidendl;20 21 22 sleep(10);23 //挂接内存24 char*shmaddr(char*)shmat(shmid,nullptr,0);25 if(*shmaddr-1)26 {27 perror(shmat fail!\n);28 }29 Log(shmat shm seccese,Debug) sgmrevice shmid: shmidendl;30 sleep(10);31 32 //工作33 34 //拆除链接35 int nshmdt(shmaddr); 36 assert(n!-1);37 (void)n;38 Log(shmdt shm done,Debug) sgmrevice shmid: shmidendl;39 40 sleep(10);41 // n.删除共享内存42 nshmctl(shmid,IPC_RMID,nullptr);43 assert(n!-1);44 (void)n;45 Log(delete shm done,Debug) sgmrevice shmid: shmidendl;46 47 return 0;48 } ~发送方代码 1 #includecomm.hpp 2 int main()3 { 4 //获取k值5 key_t kftok(PATH_NAME,PROJ_ID);6 assert(k!-1); 7 (void)k; 8 Log(create key done 郑建云,Debug)key:TransToHex(k)endl;9 sleep(10); 10 //创建共享内存 11 //由于在receive已经创建共享内存所以我们主要是找到内存挂接12 //IPC_CREAT0 13 int shmid shmget(k,SIZE,IPC_CREAT); 14 if(!shmid) 15 { 16 perror(shmget fail!!\n);17 exit(-1); 18 } 19 20 Log(create shm domw,Debug) shmid: shmidendl;21 int cnt10; 22 while(cnt) 23 { 24 printf(time:%d\r,cnt--);25 sleep(1); 26 fflush(stdout); 27 } 28 printf(\n); 29 //挂接,shmaddr,不要自己写避免把其他数据覆盖30 char*shmaddr(char*)shmat(shmid,nullptr,0); 31 if(shmaddrnullptr) 32 { 33 perror(shmat fail\n);34 exit(-1); 35 } 36 Log(shmat sueecss done,Debug)shmid: shmidendl;37 sleep(10); 38 39 //工作 40 41 //拆除共享内存 42 int nshmdt(shmaddr); 43 printf(n%d\n,n); 44 assert(n0); 45 (void)n; 46 Log(shmdt success done,Debug) shmid shmidendl; 47 printf(%p\n,shmaddr); 48 return 0; 49 } 执行顺序必须先执行接收代码因为接收代码必须先创建好共享内存然后发送方才可以链接。 否者发送方先建立了在执行中接收方将检查出内存中已经存在该key的共享内存直接报错返回一个-1到shmid。
http://www.hkea.cn/news/14354041/

相关文章:

  • 如何做电子商城网站最好的赣州网站建设
  • 三层架构做网站还是系统如何让百度快照找到自己的网站
  • 行业网站建设公司推荐做任务什么网站
  • 网站维护的协议制作网站问题和解决方法
  • 官方网站建设的目的有哪些做汽配的网站
  • 做美团网这种网站赚钱吗龙岩天宫山电话
  • 前台网站开发技术工商网核名查询
  • 北京网站建设飞沐网页设计与网站建设完全学习手册
  • 网站托管费女装小说WordPress
  • portfolio做网站温湿度ui设计
  • 成都协会网站建设注册域名遵循什么原则
  • 购物网站开发教学视频word在线编辑
  • 体育论坛网站建设网络营销介绍
  • 网站设计与制作费用怎样做支付网站
  • 网站关键词表格下载企业网站的切片怎么做
  • wordpress电影网站wordpress评论输入框
  • 邯郸住房及城乡建设部网站wordpress 注册页修改
  • 衡阳微信网站开发深入了解网站建设
  • 网站建设公司 云智互联房地产市场发展趋势
  • 深圳网站建设深圳做网站可以用新建项目的方式吗
  • 西部数码网站管理助手 2008音乐网站是否可以做浅度链接
  • 抖音号出售网站网站备案被注销吗
  • 华强北设计网站建设深圳定制网站制作招聘网
  • 做直播网站用什么程序wordpress timeline 修改
  • 各大网站响应生态建设手机制作个人简历表格
  • 惠山做网站公司网站源码整站打包
  • 电商网站开发数据库设计wordpress完美商城
  • 青岛网站设计c2c代表性企业网站
  • 做网站到哪里接单怎么去推广一个产品
  • 沈阳网站建设发布html空白模板下载