版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
/*******************实践教学*******************兰州理工大学计算机与通信学院2011年秋季学期操作系统原理课程设计题目:进程的管道通信实验专业班级:09计算机(5)班姓名:董跃永学号:09240521指导教师:年福忠成绩:_______________
目录TOC\o\h\z\uHYPERLINK\l”_Toc249375724"摘要 3HYPERLINK\l"_Toc249375725"正文ﻩ4HYPERLINK\l"_Toc249375726"一.问题描述ﻩ4HYPERLINK\l"_Toc249375727”二。设计目的 4HYPERLINK\l”_Toc249375728"三.设计要求ﻩ5HYPERLINK\l"_Toc249375729"四。详细设计ﻩ5HYPERLINK五.结果分析ﻩ9HYPERLINK参考文献 11HYPERLINK\l"_Toc249375735"致谢ﻩ12HYPERLINK\l”_Toc281166869"附件Ⅰ源程序代码 13ﻬ摘要管道通信是发送进程和接收进程之间通过一个通道交流信息,管道是单向的,发送进程视管道为输出文件,即向管道写入数据,接收进程视管道为输入文件,即从中读取数据。先写入的必定先读出,即管道通信的工作是单向的并以先进先出为顺序。管道通信的实质是一个共享文件,数据以自然字符流的方式写入和读出。在Linux系统中,进程在执行系统调用pipe()之后便创建了一个无名管道。在管道通信实验中,可用父进程创建一个无名管道,子进程向其中写入信息,父进程从其中读取信息并显示.关键词:父进程,子进程,管道,通信,文件ﻬ正文一.问题描述:(1).了解UNIX的命令及使用格式,熟悉UNIX/LINUX的常用基本命令,练习并掌握UNIX提供的vi编辑器来编译C程序,学会利用gcc、gdb编译、调试C程序.(2).编写程序实现进程的管道通信。用系统调用pipe()建立一管道,二个子进程P1和P2分别向管道各写一句话:Child1issendingamessage!Child2issendingamessage!父进程从管道中读出二个来自子进程的信息并显示(要求先接收P1,后P2)。二.设计目的:通过该题目的设计过程,熟悉UNIX/LINUX支持的管道通信方式,了解该系统下进程管道通信机制,掌握进程管道通信程常用的系统函数,能够编写代码实现父子进程的管道通信.练习并掌握UNIX/LINUX提供的vi编辑器来编译C程序,学会利用gcc、gdb编译、调试C程序。三.设计要求:编写程序实现进程的管道通信.用系统调用pipe()建立一管道,二个子进程P1和P2分别向管道各写一句话:Child1issendingamessage!Child2issendingamessage!父进程从管道中读出二个来自子进程的信息并显示(要求先接收P1,后P2)。四.详细设计:1.程序流程图函数的调用关系图:2.算法设计各模块的伪码算法该函数使用头文件如下:#include<sys/types.h>#include<unistd.h>#include<stdio.h>#include<stdlib.h>pipe()函数调用格式:intfd[2];pipe(fd)功能:建匿名管道,fd[0]为读端,fd[1]为写端。2.fork()函数调用格式:pid_tpid1,pid2;pid1=fork();pid2=fork();功能:fork()函数创建子进程.注:此函数被调用一次但返回两次,子进程中返回0值,而父进程中返回子进程ID;调用fork()函数,父、子进程的执行次序不确定。3。sprintf()函数调用格式:charoutpipe[50];charstring=“hello";sprintf(outpipe,string);功能:把字符串string的内容写入到字符数组outpipe中。4.write()函数调用格式:write(fd[1],outpipe,nbyte);功能:把nbyte个字节的数据,从outpipe所指向的缓冲区写到由fd所指向的系统文件中。写入内容时,关闭读取端,锁定写入端,写入完成,解除锁定。5。read()函数调用格式:read(fd[0],inpipe,nbyte);功能:从fd[0]端读取nbyte个字节的数据,并把数据写入到inpipe中。6.lockf()函数调用格式:lockf(fd[1],1,0);功能:锁定管道写端,保证写入数据的完整性。lockf(fd[1],0,0);功能:解锁管道写端。7.wait()函数调用格式:wait(NULL);功能:在用fork()创建一个子进程的时候,若先进入父进程,则使其等待,直到子进程把信息写入管道,再执行父进程.8.sleep()函数调用格式:sleep(num);功能:使进程休眠num秒。ﻩ9.exit()函数调用格式:exit(0);功能:子进程执行写入数据操作完成,退出,并向系统返回0值.五。结果分析最终所得结果如下图所示:
设计总结通过这次课程设计,我对操作系统的进程管道通信有了进一步的了解,同时熟悉了在linux环境下c语言的编译和调试,以及linux系统有关进程管道通信的函数。更为重要的是,将所学的课本理论知识运用到实践当中,实现了理论与实践相结合,提高了解决实际问题的能力.从开始借阅书籍,上网查找相关资料,到设计程序,短短两周很快就过去了。在这次课程设计的过程中,我遇到了很多困难,通过自己的不断努力,同学的帮助,和老师的细心指导,进程的管道通信实验基本完成.其功能基本符合课程设计任务的要求.在此次实践设计中我遇到了很多困难,这说明对理论知识还需要深入地理解。动手实践编写程序,调试程序则是更为重要的。所以在平时学习课本知识的同时,需要亲自实践编写代码实现理论的知识,提高自己的实际动手能力,并加深对理论知识的理解.最后,通过该题目的设计过程,我熟悉Linux操作系统、gcc、vim编辑器、make以及linux下进程的管道通信,进一步理解了操作系统中进程管道通信的原理,并学会如何在linux操作系统中实现进程的管道通信。ﻬ参考文献1.汤子瀛,哲凤屏。《计算机操作系统》.西安电子科技大学学出版社。2.王清,李光明。《计算机操作系统》。冶金工业出版社.3。孙钟秀等.《操作系统教程》.高等教育出版社4。曾明.《Linux操作系统应用教程》.陕西科学技术出版社.5。张丽芬,刘利雄.《操作系统实验教程》.清华大学出版社。6。孟静.《操作系统教程-—原理和实例分析》。高等教育出版社7.周长林.《计算机操作系统教程》。高等教育出版社8.张尧学.《计算机操作系统教程》。清华大学出版社9.任满杰。《操作系统原理实用教程》。电子工业出版社ﻬ致谢这次课程设计使我学到了很多实用知识,真正做到了理论与实践相结合,得到了操作系统方面的综合训练,提高了解决实际问题的能力。这次课程设计也使我明白了,学习知识不仅仅是停留在书本上那么简单,编写代码,调试程序,更是一种有效地学习知识的方法。只有理论与实践相结合才在以后的学习与工作中走的更高走的更远.在此,感谢年福忠老师孜孜不倦的指导同学无私的帮助。附录Ⅰ:源程序代码#include〈sys/types.h〉#include〈unistd.h>#include〈stdio.h>#include〈stdlib。h>intmain(){ﻩpid_tpid1,pid2; intfd[2];ﻩcharoutpipe[50],inpipe[50];ﻩif(pipe(fd)〈0)ﻩ /*创建匿名管道,fd[0]为读端,fd[1]为写端*/ﻩ{ printf("Pipecreateerror!\n");ﻩﻩexit(-1); }ﻩ/*****Thisisthechildprocess1*/ /*****fork函数被调用一次但返回两次,子进程中返回0值,而父进程中返回子进程ID;*/ﻩ/*****但调用fork()父子进程的执行次序不确定.*/ﻩ/*如果创建子进程失败,则退出*/ﻩif((pid1=fork())==—1) ﻩ/*创建子进程1*/ﻩ{ ﻩprintf("Errorinfork()。\n"); ﻩexit(-1);ﻩ} /*执行子进程1,向管道写入信息*/ if(pid1==0)ﻩ{ﻩ lockf(fd[1],1,0);ﻩ/*锁定管道写端,保证写入数据的完整性*/ﻩ sprintf(outpipe,"child1issendingamessage!”); ﻩwrite(fd[1],outpipe,35);/*子进程向管道中写入信息*/ﻩ lockf(fd[1],0,0); ﻩ/*解锁管道写端*/ ﻩexit(0);ﻩﻩﻩﻩ/*子进程1退出*/ﻩ}ﻩelse {ﻩ /*若先进入父进程,则使其等待,直到子进程1把信息写入管道*/ ﻩ/*即:先让子进程1把信息写入管道,后让子进程2把信息写入管道*/ ﻩwait(NULL);ﻩ /*Thisisthechildprocess2*/ /*如果创建子进程失败,则退出*/ﻩﻩif((pid2=fork())==-1)ﻩ { ﻩprintf(”Errorinfork().\n”); exit(—1);ﻩ } ﻩ/*执行子进程2*/ﻩ if(pid2==0) ﻩ{ﻩﻩﻩlockf(fd[1],1,0);/*锁定管道写端,保证写入数据的完整性*/ ﻩ sprintf(outpipe,"Child2issendingamessage!”); ﻩ write(fd[1],outpipe,34); lockf(fd[1],0,0);ﻩ/*解锁管道写端*/ﻩ exit(0); ﻩ /*子进程2退出*/ } ﻩelse { ﻩﻩwait(0); ﻩ/*若先执行父进程,则等待,直到子
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 环己酮(醇酮)装置操作工操作测试考核试卷含答案
- 水生动植物采集工改进水平考核试卷含答案
- 信息安全管理员安全意识竞赛考核试卷含答案
- 飞机桨叶桨根型修工岗前理论技能考核试卷含答案
- 化学铣切工安全实操测试考核试卷含答案
- 阜阳市阜南县2025-2026学年第二学期四年级语文期末考试卷(部编版含答案)
- 伊春市西林区2025-2026学年第二学期五年级语文期末考试卷(部编版含答案)
- 邢台市邢台县2025-2026学年第二学期五年级语文第八单元测试卷(部编版含答案)
- 昌都地区贡觉县2025-2026学年第二学期四年级语文第八单元测试卷(部编版含答案)
- 大同市天镇县2025-2026学年第二学期四年级语文期末考试卷(部编版含答案)
- 酒店前台服务标准流程及客户接待指导
- GB/T 46914-2025养老机构生活照料服务基本规范
- 压铸模具管理制度规范
- 如何做好科研实验记录课件
- 2025年宣城市广德县辅警招聘考试题库附答案解析
- 2026年咨询工程师咨询宏观经济考前冲刺重点知识考点总结笔记
- 中学生防诈骗安全课件
- 2025年青岛市中考生物试卷真题(含答案)
- 2025年商用车融资租赁行业分析报告及未来发展趋势预测
- 货运企业超限超载安全培训内容课
- 2024-2025学年山西省临汾市七年级下学期期中语文试题
评论
0/150
提交评论