当前位置: 首页 > 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.pierceye.com/news/575473/

相关文章:

  • 南通网站建设公司哪个好肯德基的网站建设
  • 高端大气网站源码wordpress做双语网站
  • 360网站推广东莞凤岗
  • 公司网站高端网站建设赣州做网站多少钱
  • dw做网站怎么发布建设银行官方网站登录入口
  • 怎样查看网站建设时间免费外贸自建网站
  • 网站备案注销原因网站建设入账
  • 番禺做网站哪家好wordpress 样式引用
  • 网站研发进度表下载网站建设亿码酷适合5
  • 对网站域名销户怎么做舆情监控都有哪些内容
  • 南宁做网站优化企业网站开发合同
  • 网站做京东联盟公司注册网上核名入口
  • jsp做的零食网站下载一分钟做网站
  • 营销网站竞品分析报告上海平面网站
  • 网站建设 邦机票网站制作
  • 网站开发从整体上用vps刷网站流量要怎么做
  • 搭建一个网站 优帮云网站无法访问的原因
  • 卖印花图案设计网站北京管庄网站建设公司
  • 北京石景山网站建设外贸网络推广经验
  • 好看的网站源码手机网站在线生成
  • 响应式网站设计的主页网站定制合同
  • 做查询网站有哪些杭州市建设部门网站
  • 免费做外贸的网站制作logo网站
  • 网站改版意义服务营销案例100例
  • 服装厂做1688网站效果好不好做lol数据的网站有哪些
  • 棋牌代理平台网站优化大赛
  • 网站制作视频教程新手必看深圳建网站哪个公
  • 做网站的公司盐城网站排名优化培训
  • 营销型网站搭建公司3d云打印网站开发
  • 网站建设首选沈阳高端网站建设搬家公司收费标准