2023年实验报告实验七.pdf
浙江大学城市学院实验报告课程名称_ _ _ _ _ _ _ _ _ _ _ 操作系统原理实验_ _ _ _ _ _ _ _ _ _ _ _ _ _ _实验项目名称_ _ _ _ _ _ _ _ _ _ _ 实验七 进程通信一一消息队列_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _学生姓名 潘唯帆 专业班级 计算1003 学号 3 1001 1 72实验成绩 指导老师(署 名)日期注意:务请保存好各自的源代码,已备后用。请上传到BB平台。实验目的和规定1.了解L inux系统的进程间通信机构(IP C);2.理解L in u x 关于消息队列的概念;3.掌握Linux支持消息队列的系统调用;4.巩固进程同步概念。二、实验内容实现并发进程间消息的发送与接受。三、实验环节1、消息的发送与接受1)。编译运营给出的c 1 i en t.c和 serve r.c,观测运营结果。root localhost:/panweifan.x文件 编 辑 怎)查看Q)终端 标签 帮助(W root loc a lh ost pa nwe i f a njx g c c -o se rve r se rve r.cse rve r.c:I n f unc ti on se rve r*:se rve r.c:2 2:警告:隐式声明与内建函数f i ri ntf F 兼容se rve r.c:2 6:警告:隐式声明与内建函数e xi t,不兼容 roottt loc a lh ost pa n we i f a n J-./se rve r(se rve r)re c e i ve d(se rve r)re c e i ve d(se rve r)re c e i ve d(se rve r)re c e i ve d(se rve r)re c e i ve d(se rve r)re c e i ve d(se rve r)re c e i ve d(se rve r)re c e i ve d(se rve r)re c e i ve d(se rve r)re c e i ve d roottt-1 oc a 1 h ost pa nwe i f a n-2)请给上述程序添加同步控制,实现同步运营。root localhost:/panweifan x文 件 编 辑 查 看 3 终 端 标 签 帮 助 rootlocalhost panwei fa ns./server(server)received(server)received(server)received(server)received(server)received(server)received(server)received(server)receivea rootlocal host pan we i lan j J(sen 也)recei ved(server)receivedroot localhost:/panweifan-X文件 编 辑 查看 终端 标签 帮 助 rootlocalhost panweifan?./c lie n t(clie n t)se n t(clie n t)se n t(clie n t)se n t(clie n t)se n t(clie n t)se n t(clle n t)se n t(clie n t)se n t(clie n t)se n t(clie n t)se n t(clie n t)se n t rootlocalhost pan we i fan=#i nc 1 ude#i n elude#i n elude#d e fine MSG KEY 75struct msgf o rm(d o ng mt y p e;char mtextl 0 0 0 ;msg;int m s gqid;v oid ser v er()(/*创建75#消息队列*/呵 s gq i d=m s g g e t(M S G KEY,0777|I PC_CR E AT);0 do。/*接受消息*/0ms g rcv(msgqid,&msg,10 3 0,0,0);pr i n t f(se r ver)r e ceivednu);4 o c k f(msg,0,0);o w h ile(msg.mty p e!=1);/*删除消息队列,归还资源*/msgctl(ms g q i d,I PC_RMID,0);。e xit(O);)ma i n()s e rver();)#include#i n elude#i n c lude#d e fine MSGK E Y 75s t r u c t msgfbrm(long mtype;c ha r mt e x t 1 0 00;msg;int msgqi d;void clien t()(i nt i;/*打开75#消息队列*/omsg q id=msgge t(MSGKEY,0 777);。f or(i=1 0;i=l;i-)(8msg.mly p e=i;。prin t f(n(cl i e n t)se n tn);/*发送消息*/8m s gsn d(ms g qid,&m s g,1024,0);lo c k f(m s g,l,0);e xi t(0);mai n()c lient();)2、编写程序:使用消息队列,实现具有下列功能两个程序(进程):1)程序A 负责接受用户来自键盘的输入;2)程 序 B 负责实时输出用户由程序A 接受的字符。程序A 和程序B 可分别在两个进程上同时运营。root localhost:/panweifan x文 件 编 辑查看9终 端 标 签 帮 助 她 root local host panwei fan?./clientIhaveadreamthatonedayeveryonew illliveahappy1 i feroot localhost:/panweifan x文件编辑查看Q)终 端 标 签 帮 助rootlocalhost panwei fan?./server(server)received:I(server)received:have(server)received(server)recei ved:dream(server)received:that(server)recet ved:one(server)received:day(server)received:everyone(server)recei ved:wi11(server)recei ved:live(server)received:a(server)received:happy(server)received:1i fe(server)received:.#in c 1 u d e#i n c lude#i n elude#define MSGKEY 7 5stru c t m sg form(o 1 on g mtype;c h ar mtext 1 000;m s g;i nt ms g q i d;vo i d client()int i;。/*打开75#消息队列*/omsgqi d=ms g g e t(MS G KEY,0 777);of o r(i=10 0;i=1;i)msg.mtype=i;scanf(n%s 0,msg.mtext);。/*发送消息*/“msgs n d(msg q id,&msg,10 2 4,0);。1 ockf(msg,1,0);0)exit(0);)main()(clien t();#inc 1 ude#i nc 1 u d e#i n c 1 ude#de f in e MS GKEY 75s t r u c t msg f o rmlong m t ype;cha r m t ext 1 000 ;m s g;int msgqid;vo i d s erv e r()(。/*创建75#消息队列*/msgqid=m s gget(M S G KEY,07 77|IPC_CREAT);do(。/*接受消息*/msgrcv(m s g q id,&m s g,l 0 30,0,0);叩rintf(serv e r)r e c eive d:%sn ,m s g.m t e x t);lockf(msg,0,0);while(m s g.mtype!=l);/*删除消息队列,归还资源*/s gc t l(msg q id,IP C_RMID,0);exi t(0);)main()(a s e rve r();)四、讨论、心得记录实验感受、上机过程中碰到的困难及解决办法、遗留的问题、意见和建议等。