




免费预览已结束,剩余5页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
操作系统课程实验操作系统实验报告 姓 名 学 号 班 级 组 号 提 交 日 期 2013年11月7日 东南大学成贤学院计算机系2012年11月7日一、 实验题目 信号与管道通信二、 实验目的1. 加深理解信号和管道的概念及实现进程间通信的原理。2. 掌握信号通信机制,学会通过信号实现进程间的同步通信。3. 掌握匿名管道通信机制,学会通过匿名管道实现进程间的数据通信。三、 实验内容5.1匿名管道通信 本实验实现父子进程之间的管道通信。程序中由父进程创建一个匿名管道,并创建了2个子进程。两个子进程都从管道写端(入口)写入一个发给父进程的消息(字符串),父进程则从管道读端(出口)读取发来的两个消息。要求用你的普通用户账号登录,并进入ostest目录。 login: /在冒号后输入用户名password: /在冒号后输入口令,无回显!实验步骤(1)程序设计vi test5_1.c /用vi 编辑器编辑下面的程序test5_1.ci /插入 Esc /退出插入状态:wq /保存源代码如下: /test5_1.c:匿名管道# include # include #include #includeint main() int i ,p1 ,p2 , pid , fd2 ; char buf80,buf180; Pipe(fd); while(p1=fork( )=-1); if (p1=0) /子进程1代码 sprintf (buf,”Message of child_1”); /在buf中写入消息文本 write(fd1,buf,80); printf (“Child_1 write an message to pipe!n”); for( i=0; i99999; i+); exit(0); else while(p2=fork()=-1); if (p2=0) /子进程2代码 sprintf (buf,”Message of child_2”); Write(fd1,buf,80); printf (“Child_2 write an message to pipe!n”); for( i=0; i99999; i+); exit(0); else /父进程代码 for(i=0;i2;i+) pid=wait(NULL); read(fd0,buf1,80); if(pid=p1) printf(“parent read an message of child_1:%sn”,buf1); else printf(“parent read an message of child_2:%sn”,buf1); close(fd0); close(fd1); printf(“OVERn”); return 0; (2) 编辑、编译、调试该程序。gcc -o test5_1 test5_1.c /用gcc编译test5_1.c,并生成可执行程序test5_1./test5_1 /执行当前目录下的C程序test5_1 (3) 多次运行test5_1,观察运行结果。如果出现不符合要求的输出结果,问题出在什么地方?修改程序,直到无错为止。5.2信号通信本实验实现父子进程之间的信号通信。在创建了两个子进程后,父进程在接收到外部中断信号SIGINT后再启动其后续工作。而两个子进程则在分别接收到父进程发来的SIGSUR1信号和SIGSUR2信号后再启动它们的后续工作。实验步骤(1)程序设计vi test5_2.c /用vi 编辑器编辑下面的程序test5_2.ci /插入Esc /退出插入状态:wq /保存 源代码如下:/test5_2.c:信号通信# include # include #include #includeint wait_flag=1; /同步标志void start( )/自定义的信号处理函数wait_flag=0; int main() int p1,p2; long int i; signal(SIGINT,start); printf(“Parent create child!n”); while(p1=fork()= =-1); /创建子进程1 if (p10) while(p2=fork()= =-1); /创建子进程2 if (p20) printf (“Enter interrupt signal!n”); while(wait_flag!=0); kill(p1,SIGUSR1); kill(p2,SIGUSR2); wait(0); wait(0); printf(“Over!n”); else/子进程2代码printf(“Child_2 is running.n”); signal(SIGUSR2,start); wait_flag=1; while(wait_flag!=0);for(i=0;i999999;i+); printf (“Child_2 is over!n”); exit(0); else /子进程1代码printf(“Child_1 is running.n”); signal(SIGUSR1,start); wait_flag=1; while(wait_flag!=0); for(i=0;i999999;i+); printf (“Child_1 is over!n”); exit(0); return 0;(2) 编辑、编译test5_2.cgcc -o test5_2 test5_2.c /用gcc编译test5_2.c,并生成可执行程序test5_2./test5_2 /执行当前目录下的C程序test5_2(3) 运行test5_2,当屏幕上显示“Enter interrupt signal!”时,按Ctrl+C键产生外部中断。(4) 观察输出结果。 四、实验分析与思考(1) 预期的结果能否显示出来? 若不能,是什么原因造成这种现象? 答:不能,实验5.1中,刚开始并不能显示出预期结果,是因为不能从管道中先后读出两个消息,并输出相关提示信息。实验5.2中原来出现的结果也有误差,是因为终止子进程的wait函数只进行了一次。(2) 程序该如何修改才能得到正确结果? 答:实验5.1中,用for循环的wait函数,终止其对应的子进程。实验5.2中,两个子进程要对应两个wait函数。五、实验体会 通过这次实验,我加深理解信号和管道的概念及实现进程间通信的原理,掌握信号通信机制,学会通过信号实现进程间的同步通信并且 掌握匿名管道通信机制,学会通过匿名管道实现进程间的数据通信。 read函数原型:long read(int fd, char *buf, long size);其中,参数fd是已打开文件的文件描述符;buf是存放所读文件信息的内存区的指针;size是所读文件信息的最大长度(字节数),不能超过buf区的长度。函数返回值是实际所读信息的长度,0表示读文件失败。功能:读文件,从fd指定的文件中读取size个字节的信息,存入buf指向的内存区中。write函数原型:long write(int fd, char *buf, long size);其中,参数fd是已打开文件的文件描述符;buf是某内存区的指针,其中存有要写入文件的信息;size是所写信息的长度(字节数)。函数返回值若0表示写文件失败。功能:写文件,将内存区buf中长度为size
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 生态环保产业用地租赁与转让及配套设施建设协议
- 离婚协议书范本:无子女家庭财产分割与监护权协议
- 玉米种植基地与食品加工企业长期合作协议
- 煤矿采矿权转让与矿山地质灾害防治合同
- 文化娱乐场所演出人员派遣及权益保障合同
- 高难度离婚纠纷中的子女抚养权与财产分配合同
- 离婚协议签订前财产查证与风险评估专业合同
- 矿山合作开发与地质灾害防治协议书
- 离婚财产分割协议书:房产、车辆及存款明细
- 高端制造业现代学徒制人才培养三方合作协议
- 2025年反假货币试题题库及答案
- 现房与期房培训课件
- 2024年仙桃市高新技术产业投资有限公司招聘笔试真题
- 汽车知识培训讲师简介课件
- 2025年教师职称-浙江-浙江教师职称(基础知识、综合素质、初中信息技术)历年参考题库典型考点含答案解析
- 北京高校标准化食堂标准(2026版)讲解
- 专题1.4数学归纳法(高效培优讲义)
- 泸州北方化学工业有限公司锅炉烟气脱硫脱硝除尘技改项目环评报告
- 可靠性基础知识培训课件
- 耗材产品售后方案(3篇)
- 2025年全国保密教育线上培训考试试题库(含答案)
评论
0/150
提交评论