试验二,进程通信,管道共享内存_第1页
试验二,进程通信,管道共享内存_第2页
试验二,进程通信,管道共享内存_第3页
试验二,进程通信,管道共享内存_第4页
试验二,进程通信,管道共享内存_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、操作系统实验报告实验二:进程通信(一)一一管道及共享内存实验目的了解进程之中相互通信的方式加深对管道通信的了解了解共享内存通信的程序设计方法了解和熟悉Linux支持的共享存储区机制实验内容和步骤任务一、(1)阅读以上父子进程利用管道进行通信的例子(例 1),写出 程序的运行结果并分析。(2)编写程序:父进程利用管道将一字符串交给子进程处理。子进程读字符串,将里面的字符反向后再交给父进程,父进程最后读取并打印反向的字符串任务二、1)阅读例2的程序,运行一次该程序,然后用ipcs命令查看系 统中共享存储区的情况,再次执行该程序,再用ipcs命令查看系 统中共享内存的情况,对两次的结果进行比较,并分

2、析原因。最Word资料后用ipcrm命令删除自己建立的共享存储区。(有关ipcs和ipcrm 介绍见后面一页)(2)每个同学登陆两个窗口,先在一个窗口中运行例3程序1(或 者只登陆一个窗口,先在该窗口中以后台方式运行程序1),然后在另一个窗口中运行例3程序2,观察程序的运行结果并分析。运行结束后可以用ctrl+c结束程序1的运行。(3)编写程序:使用系统调用 shmget() , shmat() , shmdt(), shmctl(),编制程序。要求在父进程中生成一个30字节长的私有 共享内存段。接下来,设置一个指向共享内存段的字符指针,将一串大写字母写入到该指针指向的存贮区。调用 fork(

3、)生成子进 程,让子进程共享内存段中的内容。接着,将大写字母改成小写, 子进显示程修改共享内存中的内容。之后,子进程将脱接共享内 存段并退出。父进程在睡眠5秒后,在此显示共享内存段中的内 容(此时已经是小写字母)。三、代码及运行结果分析.任务1 (1)代码:#include#include#include#include#include#includeint main()int x,fd2;char buf30,s30;Word资料pipe(fd);while(x=fork()=-1);if(x=0)close(fd0);printf(Child Process!n);strcpy(buf,T

4、his is an examplen);write(fd1,buf,30);exit(0);elseclose(fd1);printf(Parent Process!n);read(fd0,s,30);printf(%sn,s);截图:结果和分析:创建一个管道,调用fork ()函数产生两个进程,我的系统优先 先执行父进程,比较疑惑,既然这样,管道中并没有数据是如何得出 最后结果的,后来百度了一下解释说是因为管道本身是一种同步机Word资料制,并且printf执行的时间要比其他程序时间长得多,才会这样然后执行子程序,将数据写入管道,然后父程序打印出来.任务1 (2)代码:#include#in

5、clude#include#include#include#includevoid fanzhuan(char *s)char *p=s+strlen(s)-1;char temp;while(sp)temp=*p;*p-=*s;*s+=temp;int main()int i,x,fd2;char buf20,s20,m20;strcpy(buf,This is an examplen);pipe(fd);write(fd1,buf,20);while(x=fork()=-1);if(x=0)printf(Child Process!n);read(fd0,s,20);/printf(%sn

6、,s);fanzhuan(s);write(fd1,s,20);exit(0);elsewait(NULL);close(fd1);printf(Parent Process!n);Word资料read(fd0,m,20); printf(%sn,m);)截图:3i#iFk fl(9 snvi 陲似时 ffiSHscTi 屈典 m | - | :iQ+4 E &3.王百5 Ubwitu M tiezwMzwn.Hwz:iZVbrX:2。9G畲Biwxmwz9ZHXi ftctZS , /2 ! Child Process!Parent Process l!elpmaMe ma st sihT

7、ZWKXii Z 0ZHXt2$ I.任务2 (1)代码:#include#include#include#include#includeint main()key_t key=105;int shmid_1,shmid_2;if(shmid_1=shmget(key,1000,0644|IPC_CREAT)=-1) perror(shmget shmid_1);exit(1);)printf(First shared memory identifier is %dn,shmid_1);if(shmid 2=shmget(IPC PRIVATE,20,0644)=-1)perror(shmge

8、t shmid_2);Word资料exit(2);)printf(Second shared memory identifier is %dn,shmid_2); exit(0);)截图:.共享内存入字节消息队列键 msqid 摘有者极限已用字节数消息f W!lllWlZWX: rftUJit 七zmxhwz*ZHX;/ t2J , / I.First shared iwnory identifier is 55705TCSecond shared nenory identifier is 5613&4ZHXWZEb n 口 n 西 I 国日哪建穷计一轨m Ubvtu M 位Iwa国 UWnd

9、owra 7I 惭TidDMS 10 u64 共摹的击以机曲至直Ft1 UlbUfTtU H 位 ZWM。耳。巾。曲白力6电5537&02ZWAXWZexBaaeseoB23926752WXXWZexeeoe24aaeZWMKWZ或日9日B日自白日265422ZMXXWZ白耳由白白立白电白电155.5918ZHMKHZ酎日白日白日白日21.B6fi2WXXWZ电X日由日后的片甘5574576Z1CMXWZBK日白酬日曰353BM1JWXMWZ6&00000-0H79S14ZMMKWZ0 Kg日。股白日31197JWKXWZ6X000066004227092ZWKXWZ司K&0日。日伺6日445

10、M 6 9JwKhlZ电算日白8白日电日47M1SAZWXXWZexe9aoeese5144599工HMXHZ电耳日白日白日君白日5177368ZMXXWZ物破gggS439&132WXXHZ6X090096065603354ZXXXW2eaaaefie&aS4U123ZWfl.XWZZWBLHWEQaiZWX: 血型用我喧号量故组3scmtd 拥有者校限 nsemszwxKwz0ZWXj/textz$ ipcrm -N IBSEWKHWZtZKX:/tMtSS | 要把血九三向西讶工跟机 那强岳地计事人M中宝旨Ctr gS.242SB5242&B5242SB16771216 5MN且日 即2

11、65242&S2 22 22 目 a2 a a- a0 导 0 000标标标标知标 标 日目目目日目 目 。当-D结果和分析:两次运行结束后,第二个共享标识符不一样,然后在每一次的ipcs查看共享存储区的时候,最后一行也是不一样的。原因是分配了两次,Word资料然后第一次有key值,第二次是没有的.任务2 (2)代码:程序1:#include#include#include#include#include#include#include#define SHMKEY 105#define K 1024int shmid;int main()int i,*pint;char *addr;exter

12、n void* shmat();extern cleanup。;for(i=0;i20;i+)signal(i,cleanup);shmid=shmget(SHMKEY,16*K,0777|IPC_CREAT);addr=shmat(shmid,0,0);printf(addr 0 x%xn,addr);pint=(int *)addr;for(i=0;i256;i+)*pint+=i;pause();cleanup()shmctl(shmid,IPC_RMID,0);exit(0);程序2:#include#include#include#include#includeWord资料#incl

13、ude#include#define SHMKEY 105#define K 1024int shmid;int main()int i,*pint;char *addr;extern void *shmat();shmid=shmget(SHMKEY,8*K,0777);addr=shmat(shmid,0,0);pint=(int *)addr;for(i=0;i256;i+)printf(%dn,*pint+);截图:33*Fl M tV| 幽比MJ jffiSHECTl 屈用叫 | - | :i gj - Q BZI 匚=C | 0Q 在It虻*国喀1 造石HEX口穿段的计钮岳 Ubv

14、tu M fiEr国 Windom 7力 Windws 10 u64其摹的南戛现,(,主页 困 Ubwrtu M tiezwM2332342352372382392462412422432442452462472482492Sfi251252253254255 znxxwzEMX:e审mERXTt。心zwMxwzyZMX;/taxtl$ ,/2-4 addr ax7?t5ba0荽父人下向已京鼻总机工在电后册料*人夜中宝出口,6.结果和分析:程序(1)后台运行的时候,先创建一个共享内存段,然后挂接,得到共享区的地址,并且输出这个地址,然后 pint的首地址就是共享区首地址,向共享区里面输入 1,

15、2,3,4,5. 。 155。程序(2)执行Word资料的时候首先先挂接到这个共享区,然后向从首地址开始遍历,输出其中的内容.任务2 (3)代码:#include#include#include#include#include#include#include#include int main()key_t key=105;int shmid,p1,i;char *addr,*pint,temp;shmid=shmget(key,30,0644|IPC_CREAT);addr=shmat(shmid,0,0);for(i=0;i5;i+)*addr=A+i;addr+;while(p1=fork

16、()=-1);if(p1=0)shmid=shmget(105,30,0644);printf(successn);addr=shmat(shmid,0,0);for(i=0;i5;i+)temp=*addr;*addr=temp+32;addr+;addr=shmat(shmid,0,0);printf(%sn,addr);shmdt(addr);elsesleep(5);addr=shmat(shmid,0,0);Word资料 printf(%sn,addr);)/printf(%sn,addr);shmctl(shmid,IPC_RMID,0); exit(0);)截图:结果和分析:首先显示创建一个要求的共享区,然后挂接上去,得到共享区首 地址,向共享区中输入一串大写字符串,然后调用 fork (),生成一 个子程序,先让挂接到

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论