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

免费建站平台0做app价格

免费建站平台0,做app价格,好的公司网站有什么用,济南道驰网站建设有限公司怎么样共享内存是被多个进程共享的一部分物理内存。共享内存是进程间共享数据的一种最快的方法#xff0c;一个进程向共享内存区域写入了数据#xff0c;共享这个内存区域的所有进程就可以立刻看到其中的内容。原理图如下#xff1a; 共享内存的实现分为两个步骤#xff1a; 一、… 共享内存是被多个进程共享的一部分物理内存。共享内存是进程间共享数据的一种最快的方法一个进程向共享内存区域写入了数据共享这个内存区域的所有进程就可以立刻看到其中的内容。原理图如下 共享内存的实现分为两个步骤 一、 创建共享内存使用shmget函数。 二、 映射共享内存将这段创建的共享内存映射到具体的进程空间去使用shmat函数。 创建共享内存 int shmget(key_t key ,int size,int shmflg) key标识共享内存的键值0/IPC_PRIVATE。当key的取值为IPC_PRIVATE,则函数shmget将创建一块新的共享内存如果key的取值为0而参数中又设置了IPC_PRIVATE这个标志则同样会创建一块新的共享内存。 返回值如果成功返回共享内存表示符如果失败返回-1。 映射共享内存 int shmat(int shmid,char *shmaddrint flag) 参数 shmid:shmget函数返回的共享存储标识符 flag决定以什么样的方式来确定映射的地址(通常为0) 返回值 如果成功则返回共享内存映射到进程中的地址如果失败则返回-1。 共享内存解除映射 当一个进程不再需要共享内存时需要把它从进程地址空间中多里。 int shmdt(char *shmaddr) 贡献内存实例如下 实验要求创建两个进程在A进程中创建一个共享内存并向其写入数据通过B进程从共享内存中读取数据。 chm_com.h函数 [cpp] view plaincopy #define TEXT_SZ 2048      struct shared_use_st   {       int written_by_you;       char some_text[TEXT_SZ];   };   读取进程 [cpp] view plaincopy /**********************************************************  *实验要求   创建两个进程通过共享内存进行通讯。  *功能描述   本程序申请和分配共享内存然后轮训并读取共享中的数据直至  *           读到“end”。  *日    期   2010-9-17  *作    者   国嵌  **********************************************************/   #include unistd.h   #include stdlib.h   #include stdio.h   #include string.h   #include sys/types.h   #include sys/ipc.h   #include sys/shm.h   #include shm_com.h      /*   * 程序入口   * */   int main(void)   {       int running1;       void *shared_memory(void *)0;       struct shared_use_st *shared_stuff;       int shmid;       /*创建共享内存*/       shmidshmget((key_t)1234,sizeof(struct shared_use_st),0666|IPC_CREAT);       if(shmid-1)       {           fprintf(stderr,shmget failed\n);           exit(EXIT_FAILURE);       }          /*映射共享内存*/       shared_memoryshmat(shmid,(void *)0,0);       if(shared_memory(void *)-1)       {           fprintf(stderr,shmat failed\n);           exit(EXIT_FAILURE);       }       printf(Memory attached at %X\n,(int)shared_memory);          /*让结构体指针指向这块共享内存*/       shared_stuff(struct shared_use_st *)shared_memory;          /*控制读写顺序*/       shared_stuff-written_by_you0;       /*循环的从共享内存中读数据直到读到“end”为止*/       while(running)       {          if(shared_stuff-written_by_you)          {              printf(You wrote:%s,shared_stuff-some_text);              sleep(1);  //读进程睡一秒同时会导致写进程睡一秒这样做到读了之后再写              shared_stuff-written_by_you0;              if(strncmp(shared_stuff-some_text,end,3)0)              {                  running0; //结束循环              }          }       }       /*删除共享内存*/       if(shmdt(shared_memory)-1)       {           fprintf(stderr,shmdt failed\n);           exit(EXIT_FAILURE);       }          exit(EXIT_SUCCESS);   }   写入进程 [cpp] view plaincopy /**********************************************************  *实验要求   创建两个进程通过共享内存进行通讯。  *功能描述   本程序申请了上一段程序相同的共享内存块然后循环向共享中  *           写数据直至写入“end”。  *日    期   2010-9-17  *作    者   国嵌  **********************************************************/   #include unistd.h   #include stdlib.h   #include stdio.h   #include string.h   #include sys/types.h   #include sys/ipc.h   #include sys/shm.h   #include shm_com.h      /*   * 程序入口   * */   int main(void)   {       int running1;       void *shared_memory(void *)0;       struct shared_use_st *shared_stuff;       char buffer[BUFSIZ];       int shmid;       /*创建共享内存*/       shmidshmget((key_t)1234,sizeof(struct shared_use_st),0666|IPC_CREAT);       if(shmid-1)       {           fprintf(stderr,shmget failed\n);           exit(EXIT_FAILURE);       }          /*映射共享内存*/       shared_memoryshmat(shmid,(void *)0,0);       if(shared_memory(void *)-1)       {           fprintf(stderr,shmat failed\n);           exit(EXIT_FAILURE);       }       printf(Memory attached at %X\n,(int)shared_memory);          /*让结构体指针指向这块共享内存*/       shared_stuff(struct shared_use_st *)shared_memory;       /*循环的向共享内存中写数据直到写入的为“end”为止*/       while(running)       {           while(shared_stuff-written_by_you1)           {               sleep(1);//等到读进程读完之后再写               printf(waiting for client...\n);           }           printf(Ener some text:);           fgets(buffer,BUFSIZ,stdin);           strncpy(shared_stuff-some_text,buffer,TEXT_SZ);           shared_stuff-written_by_you1;           if(strncmp(buffer,end,3)0)           {               running0;  //结束循环           }       }       /*删除共享内存*/       if(shmdt(shared_memory)-1)       {           fprintf(stderr,shmdt failed\n);           exit(EXIT_FAILURE);       }       exit(EXIT_SUCCESS);   }   3 . 在一个终端中运行shm1在另一个终端中运行shm2.当shm1运行起来之后由于共享内存中没有数据可读会处于等待状态 [rootlocalhost 2-4-4]# ./shm1 Memory attached at B7F9A000 /***阻塞***/ 再向shm2运行的终端输入字符串 [rootlocalhost 2-4-4]# ./shm2 Memory attached at B7FD8000 Enter some textImpossible is nothing waiting for client。。。 waiting for client。。。 Enter some textAnything is possible waiting for client。。。 Ener some textend [rootlocalhost 2-4-4]# shm1能够逐个从共享内存中巴他们读出来知道双方晕倒字符串end后两个程序都退出。 [rootlocalhost 2-4-4]# ./shm1 Memory attached at B7F9A000 You writeImpossible is nothing You writeAnything is possible You writeend [rootlocalhost 2-4-4]# 以上运行过程中红色表示在终端1中运行的结果蓝色表示在终端2里面运行的结果。
http://www.zqtcl.cn/news/575473/

相关文章:

  • 如何网站seo中国化工第九建设公司网站
  • 无锡网站推广优化公司单位网站建设必要性
  • 网站建设丶金手指花总12网站建设是怎么挣钱
  • 网站开发都是用什么框架广西建设网人员查询网
  • 做购物网站怎么写开题报告中山如何建网站
  • 专门做游戏交易的网站新网站如何才做被百度收录
  • 网站模板打包自己做电视视频网站吗
  • seo网站关键词排名提升公司建设网站需要多少钱
  • 湖北网站设计流程旺旺食品有限公司网页设计
  • 无锡专业网站建设华企网站建设推广优化
  • 做网站公司流程cms203片
  • wordpress网站主机名如何优化培训体系
  • 安平网站建设团购网站建设目的
  • 长春网页网站制作做网站时搜索的代码是什么
  • 排名好的移动网站建设陕西恒业建设集团网站
  • 怎么用ps做简单网站个人商城网站建设
  • mvc做门户网站自适应网站制作费用
  • 建设工程协会网站查询系统成品网站源码在线观看
  • 宝塔做两个网站安卓版wordpress
  • 即墨网站建设招聘企业类网站有哪些
  • 汕头网站建设开发软件开发属于哪个专业
  • 企业网站建设规划书阿里云虚拟机怎么做多个网站
  • 营销平台网站建设做视频怎么做
  • 吉林房地产网站开发icp网站授权函
  • 深圳公司网站建设哪家好郑州短视频培训机构
  • 网络培训班答案百度seo收录软件
  • 中核工建设集团有限公司网站网站建设管理中se是什么意思
  • 网站如何做关键词引流网站怎么快速做收录
  • 网站建设文案网站设计要学哪些
  • 品牌网站建设gs平台搭建工具