您好,欢迎访问三七文档
实验项目四进程通信一、实验目的1.了解什么是消息,熟悉消息传送原理。2.了解和熟悉共享存储机制。3.掌握消息的发送与接收的实现方法。二、实验内容1.根据消息传送机理,使用系统调用msgget(),msgsnd(),msgrev(),及msgctl()编制一长度为1k的消息发送和接收的程序,要求在程序中完成10次消息的发送和接收,每次发送消息结束和接收消息结束都需给出相应的屏幕提示,且每次发送的的内容不少于一个字符,并能在接收端输出。2.根据共享存储区原理,使用系统调用shmget(),shmat(),shmdt(),及shctl()编制程序,要求创建一个长度为1k的共享存储区,并完成10次数据的发送和接收,每次发送数据结束和接收数据结束都需给出相应的屏幕提示,且每次发送的的数据应能在接收端输出。三、源程序及运行结果1.源程序:#includestdio.h#includestdlib.h#includesys/types.h#includesys/msg.h#includesys/ipc.h#defineMSGKEY75structmsgform{longmtype;charmtext[1024];}msg;intmsgqid;voidclient(){inti=0;for(;i10;i++){msgqid=msgget(MSGKEY,0777);msg.mtype=1;msg.mtext[1]=i+0;printf(send%d\n,i+0);msgsnd(msgqid,&msg,1024,0);sleep(1);}exit(0);}voidmain(){client();}#includestdio.h#includestdlib.h#includesys/types.h#includesys/msg.h#includesys/ipc.h#defineMSGKEY75structmsgform{longmtype;charmtext[1024];}msg;intmsgqid;voidserver(){inti=0;while(1){intcount=0;msgqid=msgget(MSGKEY,0777|IPC_CREAT);msgrcv(msgqid,&msg,1024,0,0);printf(getmessage);printf(%d\n,msg.mtext[msg.mtype]);msgctl(msgqid,IPC_RMID,0);count++;if(count==9){exit(0);}}}intmain(){server();return0;}运行结果:(截图)2源程序:#includesys/types.h#includesys/shm.h#includesys/ipc.h#includestdio.h#includestdlib.h#defineSHMKEY75intmain(){intshmid;int*addr;inti=0;shmid=shmget(SHMKEY,1024,0777);addr=shmat(shmid,0,0);while(i10){if(*addr==0){*(addr+1)='a'+i;printf(clientsendmessage__%c\n,*(addr+1));i++;*addr=1;}elsesleep(1);}return0;}#includesys/types.h#includesys/shm.h#includesys/ipc.h#includestdio.h#includestdlib.h#defineSHMKEY75intmain(){intshmid;inti=0;int*addr;shmid=shmget(SHMKEY,1024,0777|IPC_CREAT);addr=shmat(shmid,0,0);*addr=0;while(i10){if(*addr==0)sleep(1);else{printf(servergetmessage__%c\n,*(addr+1));*addr=0;i++;}}shmctl(shmid,IPC_RMID,0);exit(0);}运行结果:(截图)四、实验分析与总结对实验运行结果进行分析:试比较实验中两种方法实现进程通信的不同之处。
本文标题:实验项目四
链接地址:https://www.777doc.com/doc-4259884 .html