C语言消息缓冲队列编程,中的c语言编程消息传递系统

《中的c语言编程消息传递系统》由会员分享,可在线阅读,更多相关《中的c语言编程消息传递系统(10页珍藏版)》请在人人文库网上搜索。

1、操作系统第五次实验张焓1. 实验名称:项目:消息队列通信2. 实验目的:服务进程只有一个,接收个客户进程以消息形式发出的问题,接收键盘输入作为回答,再以消息形式送给提问的程序。各客户进程接收键盘输入作为问题,以消息形式发给服务进程,等待接收服务进程发来的回答消息,再开始下一轮的循环。a.程序不停执行,直到用户用ctrl+c杀死进程b.程序不停执行,直到用户键入end,进程结束执行3. 实验方法(1) 首先编写客户进程:包含需要用到的头文件,并定义结构体msgform作为报文结构用于存放报文:(2) 作一些定义及声明:(3) 创建消息队列,并添加必要的错误处理,标识码1234:(4) 接收消息队。

2、列中的报文,添加必要的错误处理,并在屏幕打印接收到的报文消息,为了方便观察,我们在这里顺带显示一下进程的pid。另外,在a情况下此段程序如图,在b情况下,将注释部分的注释符去掉即可:(5) 清空并删除消息队列,并且添加必要的错误处理:(6) 如整个程序正常运行,则退出进程:(7) 编写服务进程:包含需要用到的头文件,并定义结构体msgform作为报文结构用于存放报文(同(1)):(8) 在服务进程中启动客户进程:(9) 作一些定义及声明:(10) 创建消息队列,并添加必要的错误处理,标识码1234:(11) 从键盘输入一组字符串,存入临时的字符串数组作为报文内容,并定义报文类型。为方便观察,在。

3、屏幕打印服务进程接收到的信息的报文消息,为了方便观察,我们在这里顺带显示一下进程的pid:(12) 将报文写入到消息队列中的,添加必要的错误处理。另外,在a情况下此段程序如图,在b情况下,将注释部分的注释符去掉即可:(13) 进程执行完毕后,正常退出。(14) 在命令行中运行:情景a.情景b.4. 实验步骤(1) 启动计算机并运行Visual Studio 2015;(2) 打开终端进行程序书写多线程计算举证的程序代码;(3) 生成解决方案后再命令提示行中运行编译得到的可执行程序;(4) 分析运行出现的问题;(5) 观察运行结果,并思考;(6) 退出,并写出实验报告;5. 主要结论在进程间的通。

4、信实验中,我采用了内存共享的方式将父子进程进行了通信,在本次实验,我成功的使用了消息队列使得两进程间能够通信。6. 分析和讨论消息队列就是一个消息的链表。可以把消息看作一个记录,具有特定的格式以及特定的优先级。对消息队列有写权限的进程可以向消息队列中按照一定的规则添加新消息;对消息队列有读权限的进程则可以从消息队列中读走消息。消息队列是随内核持续的。消息队列技术是分布式应用间交换信息的一种技术。消息队列可驻留在内存或磁盘上,队列存储消息直到它们被应用程序读走。通过消息队列,应用程序可独立地执行-它们不需要知道彼此的位置、或在继续执行前不需要等待接收程序接收此消息。附录:client.c:#in。

5、clude #include #include #include #includestruct msgformlong mtype;char mtext256;int main()struct msgform msg;int running=1;int pid;int msgqid=-1,reval=-1;char buffer256;msgqid=msgget(key_t)1234,0666|IPC_CREAT);if(msgqid=-1)printf(msg create error!n);exit(EXIT_FAILURE);pid=getpid();msg.mtype = 0;whil。

6、e(running)if(msgrcv(msgqid,&msg,256,1,0)=-1)printf(client:msg receive error!n);exit(EXIT_FAILURE);printf(client:receive from pid %d you write:%sn,pid,msg.mtext); if(strncmp(msg.mtext, end, 3) = 0) running = 0; if(msgctl(msgqid,IPC_RMID,0)=-1)printf(msgctl failedn);exit(EXIT_FAILURE);exit(EXIT_SUCCES。

7、S);server.c:#include #include #include #include #includestruct msgformlong mtype;char mtext256;int main()int child;if(child=fork()=0)execlp(./client,(char*) 0);struct msgform msg;int running=1;int pid;int msgqid=-1,reval=-1;char buffer256;msgqid=msgget(key_t)1234,0666|IPC_CREAT);if(msgqid=-1)printf(。

8、msg create error!n);exit(EXIT_FAILURE);pid=getpid();msg.mtype=0;while(running)printf(enter:);fgets(buffer,256,stdin);printf(server:receive from pid %d you write:%sn,pid,buffer);strcpy(msg.mtext,buffer);msg.mtype=1;if(msgsnd(msgqid,&msg,256,0)=-1)printf(msg send error!n);exit(EXIT_FAILURE);if(strncmp(msg.mtext,end,3)=0)running=0;sleep(1);exit(EXIT_SUCCESS。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值