




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、操作系统实验报告实验二:进程通信(一)管道及共享内存一、 实验目的· 了解进程之中相互通信的方式· 加深对管道通信的了解· 了解共享内存通信的程序设计方法· 了解和熟悉Linux支持的共享存储区机制二、 实验内容和步骤任务一、(1)阅读以上父子进程利用管道进行通信的例子(例1),写出程序的运行结果并分析。(2)编写程序:父进程利用管道将一字符串交给子进程处理。子进程读字符串,将里面的字符反向后再交给父进程,父进程最后读取并打印反向的字符串任务二、1)阅读例2的程序,运行一次该程序,然后用ipcs命令查看系统中共享存储区的情况,再次执行该程序,再用ipcs
2、命令查看系统中共享内存的情况,对两次的结果进行比较,并分析原因。最后用ipcrm命令删除自己建立的共享存储区。 (有关ipcs和ipcrm介绍见后面一页)(2)每个同学登陆两个窗口,先在一个窗口中运行例3程序1(或者只登陆一个窗口,先在该窗口中以后台方式运行程序1),然后在另一个窗口中运行例3程序2,观察程序的运行结果并分析。运行结束后可以用ctrl+c结束程序1的运行。(3)编写程序:使用系统调用shmget(),shmat(),shmdt(),shmctl(),编制程序。要求在父进程中生成一个30字节长的私有共享内存段。接下来,设置一个指向共享内存段的字符指针,将一串大写字母写入到该指针指
3、向的存贮区。调用fork()生成子进程,让子进程共享内存段中的内容。接着,将大写字母改成小写,子进显示程修改共享内存中的内容。之后,子进程将脱接共享内存段并退出。父进程在睡眠5秒后,在此显示共享内存段中的内容(此时已经是小写字母)。三、 代码及运行结果分析1.任务1(1)代码:#include<stdio.h>#include<sys/types.h>#include<unistd.h>#include<sys/wait.h>#include<string.h>#include<stdlib.h>int main()int
4、 x,fd2;char buf30,s30;pipe(fd);while(x=fork()=-1);if(x=0)close(fd0);printf("Child Process!n");strcpy(buf,"This is an examplen");write(fd1,buf,30);exit(0);elseclose(fd1);printf("Parent Process!n");read(fd0,s,30);printf("%sn",s);截图:结果和分析:创建一个管道,调用fork()函数产生两个进程,
5、我的系统优先先执行父进程,比较疑惑,既然这样,管道中并没有数据是如何得出最后结果的,后来百度了一下解释说是因为管道本身是一种同步机制,并且printf执行的时间要比其他程序时间长得多,才会这样。然后执行子程序,将数据写入管道,然后父程序打印出来2. 任务1(2)代码:#include<stdio.h>#include<sys/types.h>#include<unistd.h>#include<sys/wait.h>#include<string.h>#include<stdlib.h>void fanzhuan(char
6、 *s)char *p=s+strlen(s)-1;char temp;while(s<p)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",s);fanzhuan(s)
7、;write(fd1,s,20);exit(0);elsewait(NULL);close(fd1);printf("Parent Process!n");read(fd0,m,20);printf("%sn",m);截图:3. 任务2(1)代码:#include<sys/types.h>#include<sys/ipc.h>#include<sys/shm.h>#include<stdio.h>#include<stdlib.h>int main()key_t key=105;int shmi
8、d_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("shmget shmid_2");exit(2);printf("Second shared memory identifier is
9、%dn",shmid_2);exit(0);截图:结果和分析:两次运行结束后,第二个共享标识符不一样,然后在每一次的ipcs查看共享存储区的时候,最后一行也是不一样的。原因是分配了两次,然后第一次有key值,第二次是没有的。4. 任务2(2)代码:程序1:#include<sys/types.h>#include<sys/ipc.h>#include<sys/shm.h>#include<stdio.h>#include<stdlib.h>#include<signal.h>#include<unistd.
10、h>#define SHMKEY 105#define K 1024int shmid;int main()int i,*pint;char *addr;extern void* shmat();extern cleanup();for(i=0;i<20;i+)signal(i,cleanup);shmid=shmget(SHMKEY,16*K,0777|IPC_CREAT);addr=shmat(shmid,0,0);printf("addr 0x%xn",addr);pint=(int *)addr;for(i=0;i<256;i+)*pint+=i;
11、pause();cleanup()shmctl(shmid,IPC_RMID,0);exit(0);程序2:#include<sys/types.h>#include<sys/ipc.h>#include<sys/shm.h>#include<stdio.h>#include<stdlib.h>#include<signal.h>#include<unistd.h>#define SHMKEY 105#define K 1024int shmid;int main()int i,*pint;char *addr
12、;extern void *shmat();shmid=shmget(SHMKEY,8*K,0777);addr=shmat(shmid,0,0);pint=(int *)addr;for(i=0;i<256;i+)printf("%dn",*pint+);截图:结果和分析:程序(1)后台运行的时候,先创建一个共享内存段,然后挂接,得到共享区的地址,并且输出这个地址,然后pint的首地址就是共享区首地址,向共享区里面输入1,2,3,4,5.。155。程序(2)执行的时候首先先挂接到这个共享区,然后向从首地址开始遍历,输出其中的内容5. 任务2(3)代码:#includ
13、e<sys/types.h>#include<sys/ipc.h>#include<sys/shm.h>#include<stdlib.h>#include<unistd.h>#include<sys/wait.h>#include<string.h>#include<stdio.h>int main() key_t key=105;int shmid,p1,i;char *addr,*pint,temp;shmid=shmget(key,30,0644|IPC_CREAT);addr=shmat(
14、shmid,0,0);for(i=0;i<5;i+)*addr='A'+i;addr+;while(p1=fork()=-1);if(p1=0)shmid=shmget(105,30,0644);printf("successn");addr=shmat(shmid,0,0);for(i=0;i<5;i+)temp=*addr;*addr=temp+32;addr+;addr=shmat(shmid,0,0);printf("%sn",addr);shmdt(addr);elsesleep(5);addr=shmat(shmid,0,0);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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 医药电商合规化运营下的客户服务与管理报告
- 城市新区规划调整2025年社会基础设施配套风险分析报告
- 远程医疗服务在分级诊疗中的远程医疗产业链协同创新模式研究报告
- 教育行业质量评估与认证体系构建与实施案例分析
- 智能家居系统互联互通标准国际化趋势与产业推进策略报告
- 护理实习生带教总结模版
- 即时配送行业2025:配送路径优化与成本控制创新模式研究报告
- 新能源汽车二手车市场评估与流通法律法规研究2025报告
- 值班电工工作总结模版
- 福建省三明市尤溪县2024年中考试题猜想数学试卷含解析
- 西班牙文化概况
- 云南省饮用水生产企业名录534家
- 湖北地区医院详细名单一览表
- 麦肯锡入职培训第一课:让职场新人一生受用的逻辑思考力新员工培训教材
- 苏霍姆林斯基教育思想-PPT课件
- 脊髓损伤康复评定治疗PPT课件
- 啤酒贴标机毕业设计论文
- 金属压铸机的plc控制
- 宝钢总平面图
- ZDJ-4A型自动电位滴定仪操作方法
- 进制转换(课堂PPT)
评论
0/150
提交评论