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

网站优化价格视频号小店

网站优化价格,视频号小店,ui图标素材网站,镇江企力信息有限公司实验二 进程通信 一.试验目的 a.程通信原理和基本技术 b.解linux系统进程间通信机构(IPC); c.linux关于共享内存的概念; d.linux支持进程间共享内存的系统调用; e.进程同步概念。 二验内容与要求 &…

实验二 进程通信

一.试验目的

a.程通信原理和基本技术

b.解linux系统进程间通信机构(IPC);

c.linux关于共享内存的概念;

d.linux支持进程间共享内存的系统调用;

e.进程同步概念。

二验内容与要求

(一)闹钟。用c语言编程,实现进程间通过信号进行通信。

用fork()创建两个进程,子进程在等待5秒后用系统调用kill()向父进程发送SIGALRM信号,父进程用系统调用signal()捕捉SIGALRM信号。

二)共享内存。实现利用共享内存机制的生产者/消费者问题的解决方案。生产者将数据写入共享内存。消费者从共享内存取出数据,在屏幕输出。参考如下程序:

执行内容说明:

1、首先调用shmget()函数建立一块共享内存,大小为1024个字节,该函数返回创建

的共享内存标识符。

2、然后调用fork()产生一个子进程(生产者进程)。子进程调用shmat()函数将该共享内存链接(attach)到自己的虚存空间,即可通过普通的内存写操作(例如strcpy等),在该共享内存写入数据。

3、写完数据后,子进程调用shmdt()函数断开与该共享内存的连接。

4、父进程sleep,直到子进程完成上述操作。父进程(消费者)调用shmctl()函数得到关于这块共享内存的相关消息,并打印出来。

5、父进程调用shmat()函数将这块共享内存连接到自己的虚存空间,即可以通过普通的内存读操作(例如printf等),将该共享内存中的字符串读出来。

6、读完数据后,父进程调用shmdt()函数断开与该内存的连接。

7、最后,父进程调用shmctl()函数,销毁该共享内存。

三验步骤

(一)闹钟

        1.打开终端,创建clock.文件。如图1,图2

                                           图1

                                           图2

2.编译程序,如图3

                                                                图3

3.运行程序,如图4

                                                                       图4

(二)共享内存

1.打开终端,创建sharestorage.c文件如图5,图6

                                          图5

图6

2.编译程序,如图7

图7

3.运行程序,如图8

                                                               图8

四.程序清单:注意加注释(包含关键字、方法、变量等),在每个模块前加注释

  • 闹钟。

#include <signal.h>

#include <stdio.h>

#include <unistd.h>

static int alarm_fired = 0;            //闹钟未设置

//模拟闹钟

void ding(int sig)

{

       alarm_fired = 1;               //设置闹钟

}

int main()

{

       int pid;

       printf("alarm application starting\n");

       if((pid = fork( )) == 0)

       {     //子进程5秒后发送信号SIGALRM给父进程

              sleep(5);

              kill(getppid(), SIGALRM);

              //exit(0);

return 0;

       }

//父进程安排好捕捉到SIGALRM信号后执行ding函数

       printf("waiting for alarm to go off\n");

       (void) signal(SIGALRM, ding);

       pause();           //挂起父进程,直到有一个信号出现

       if (alarm_fired)

              printf("Ding!\n");

       printf("done\n");

       //exit(0);

return 0;

}

  • 共享内存。

#include<unistd.h>

#include<sys/ipc.h>

#include<sys/shm.h>

#include<errno.h>

#include <stdio.h>

#include <string.h>

#define KEY 1234                              /*键*/

#define SIZE 1024                             /*欲建立的共享内存的大小*/

int main()

{

  int shmid;

  char *shmaddr;

  struct shmid_ds buf;

  shmid=shmget(KEY,SIZE,IPC_CREAT|0600);         /*建立共享内存*/

  if(shmid==-1)

  {

         printf("create share memory failed:%s",strerror(errno));

         return 0;

  }

  if(fork( )==0)

  {                                   /*子进程*/

         sleep(2);

         shmaddr=(char*)shmat(shmid,NULL,0);   /*系统自动选择一个地址连接*/

         if(shmaddr==(void*)-1)

         {

                printf("connect to the share memory failed:%s",strerror(errno));

                return 0;

         }

         /*向共享内存内写数据*/

         strcpy(shmaddr,"hello,this is shared data.\n");

         shmdt(shmaddr);                            /*断开共享内存*/

         //exit(0);

         return 0;

  }else

  {                                          /*父进程*/

         wait(0);         

         shmctl(shmid,IPC_STAT,&buf);     /*取得共享内存的相关信息*/

         printf("size of the share memory: shm_segsz=%dbytes\n",buf.shm_segsz);

         printf("process id of the creator:shm_cpid=%d\n",buf.shm_cpid);

         printf("process id of the last operator:shm_lpid=%d\n",buf.shm_lpid);

         shmaddr=(char*)shmat(shmid,NULL,0);      /*系统自动选择一个地址连接*/

         if(shmaddr==(void*)-1)

         {

                printf("connect the share memory failed:%s",strerror(errno));

                return 0;

         }

         printf("print the content of the share memory:");

         printf("%s\n",shmaddr);

         shmdt(shmaddr);                           /*断开共享内存*/

         /*当不再有任何其它进程使用该共享内存时系统将自动销毁它*/

         shmctl(shmid,IPC_RMID,NULL);

  }

}

五.测试结果(运行结果、结果分析)

1.闹钟程序实验结果如下

                                                 闹钟程序实验结果

2.共享内存程序实验结果如下

                                                 共享内存程序实验结果

六.总结(实验效果分析、心得体会,遗留问题)

通过这次实验我理解进程通信原理和基本技术,了解linux系统进程间通信机构(IPC),知道了linux关于共享内存的概念,了解了linux支持进程间共享内存的系统调用,巩固进程同步概念。同时我也明白了实际操作之前把理论知识学好在实验中才能得心应手,虽然会遇到各种问题但还是能通过知识解决问题。今后还是认真听讲该科目的内容。


文章转载自:

http://MmBjUKph.kdkhb.cn
http://IzkgW2nX.kdkhb.cn
http://L1ulZiIT.kdkhb.cn
http://cIKrBNIV.kdkhb.cn
http://E5eIjKtN.kdkhb.cn
http://F3PvdSvS.kdkhb.cn
http://QlEmj2f5.kdkhb.cn
http://kiS4iy58.kdkhb.cn
http://cvi7hWQc.kdkhb.cn
http://5JdDDzAS.kdkhb.cn
http://llKmGDHs.kdkhb.cn
http://gTM3PTyJ.kdkhb.cn
http://WUUc7gtd.kdkhb.cn
http://jHejr2B9.kdkhb.cn
http://XRFlkSJZ.kdkhb.cn
http://rW6gwHWR.kdkhb.cn
http://CRTa5VRI.kdkhb.cn
http://SPDgmfLW.kdkhb.cn
http://IoHnAEZi.kdkhb.cn
http://87MFBgWM.kdkhb.cn
http://zLjfYZQm.kdkhb.cn
http://0dcfDXF3.kdkhb.cn
http://LChNoDDK.kdkhb.cn
http://I6wjLj1w.kdkhb.cn
http://0ddefaXj.kdkhb.cn
http://Cf3LGZ2v.kdkhb.cn
http://BcISU0Yb.kdkhb.cn
http://XQVAjp0a.kdkhb.cn
http://GZqz37xq.kdkhb.cn
http://7CxkRasZ.kdkhb.cn
http://www.dtcms.com/wzjs/758410.html

相关文章:

  • 做网站资料准备北京天津网站建设
  • 网站管理系统后台南阳网站推广招聘
  • 卫浴网站怎么做大学生网页设计个人主页
  • 网站开发者模式下载视频wordpress ajax 搜索
  • 怎么设置网站权限网站建设合同需要交印花税吗
  • 网站域名多少钱一年新网站建设运营年计划
  • .net做的网站怎么样青海省城乡和住房建设厅网站
  • 在微信上怎么做网站做胃镜多少钱天津津门网站I
  • 网站线框图怎样做做流程图用什么网站好
  • 东莞高端网站建设哪个好网站模板怎么改
  • 做网站主页免费建站软件哪个好
  • 网站加载页面怎么做宝塔为什么要安装Wordpress
  • 国内什么网站用asp.net网站建设电脑维修数据恢复
  • 上海做企业网站的公司长沙网络销售公司
  • 国内网站建设代理wordpress menu代码
  • 天马网络网站济南公司做网站的价格
  • wordpress相册移植typecho清远网站seo
  • 海口网站排名推广青县有做网站的吗
  • 创建私人网站备案网站名
  • 做直播信号网站网站建设行业发展状况
  • 网站建设互联网推广90设计网站兼职怎么样
  • 网站制作业务外贸高端网站设计公司
  • 网站程序是什么意思网页设计与制作教程 pdf下载
  • jquery做的装修网站线上推广
  • 长春网络推广保定网站建设与seo
  • 个人电脑做网站服务器网站建筑网络学院
  • 个人网站主机的配置域名查询注册
  • wordpress流量站wordpress 注册登陆插件
  • 电子商务网站建设优势服务器上的wordpress
  • 北京企业建站程序电子商务网站建设指导书