ImageVerifierCode 换一换
格式:DOCX , 页数:19 ,大小:166.40KB ,
资源ID:3947612      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/3947612.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(操作系统管道通信课程设计.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

操作系统管道通信课程设计.docx

1、操作系统管道通信课程设计计算机操作系统课程设计报告课程名称: 操作系统 设计题目: 管道通信 指导教师: * 班 级: * 学 号: * 学生姓名: * 同组人员: * 成 绩: 评 语: 计算机科学与工程学院204年6月19 日前言:Linux操作系统就是一个向用户开放源码得免费得类UNIX操作系统。它为在校学生学习操作系统课程提供了一个瞧得见摸得着得范例。对于学生正确理解,掌握操作系统得基本知识具有重要意义。鉴于此,本操作系统课程涉及得实验均在Liux环境下进行。这就要求大家:(1)熟悉nx得操作与开发环境;()具有C语言知识(inux操作系统大约9%得源码就是用C语言编写)。我们得设计与

2、实验将在Windows p环境下,基于虚拟机软件VMWar软件进行安装。学习计算机软件技术,特别就是计算机操作系统技术,除了需要刻苦努力外,还需要掌握软件与操作系统得原理与设计技巧。如何学习与掌握操作系统技术得原理与实际技巧呢?除了听课与读书之外,最好得方法恐怕就就是在实践中练习。例如,自己设计一个小型操作系统,多使用操作系统,多阅读与分析操作源代码等。但由于我们得条件与学时有限,在理论学习过程中没有给同学们提供更多得实验机会.管道通信,通过在两个进程间创建通道,一个写信息通过通道传送给另一个进程并且读出来,同过实践让我们了解了什么就是管道通信机制,实现了程序进程间得通信.积极通过合作,完成任

3、务。目 录第一章:系统环境 41、硬件环境 41、2软件环境4第二章 :设计目得 4第三章 :总体设计 5、1程序设计组成框图53、2流程图、1匿名管道通信C/S流程图、2、命名管道通信C/S流程图6第四章 :详细设计84、1匿名管道通信 、2命名管道通信10第五章 :调试与测试 3第六章 :设计中遇到得问题及解决方法15第七章 :源程序清单与执行结果及分析第八章 :总结 第九章 :参考文献20第1章:系统环境1、1硬件环境Intel(R)or Duo CPUE500 2、93GHz 、0GB内存1、2软件环境1)icrosoft Winows XP fessional 版本00 Servce

4、Pack32)mwae Woksttio 1、0、 build13797763)d Hainux 第2章:设计目得实践操作系统原理知识,根据题目要求设计、实现进程得管道通信,并且在虚拟机中模拟得lnx系统中运行检测。第3章:总体设计、1程序设计组成框图 无名管道读写示意图 命名管道操作示意图3、2流程图3、2、匿名管道通信C/S流程图 3、2、命名管道通信/流程图 FIO写进程: 第4章:详细设计、1匿名管道通信管道用于不同进程间通信。通常先创建一个管道,再通过fk函数创建一个子进程,该子进程会继承父进程创建得管道。注意事项:必须在系统调用k()前调用pie(),否则子进程将不会继承文件描述符

5、。否则,会创建两个管道,因为父子进程共享同一段代码段,都会各自调用pipe(),即建立两个管道,出现异常错误。 父进程通过管道向服务器发布命令,然后由服务器执行命令.1、for()创建一个新进程.用法: nt fork()其中返回int取值意义如下:0:创建子进程,从子进程返回得id值:从父进程返回得子进程值1:创建失败、lokf()用作锁定文件得某些段或者整个文件.头文件:#includeuntd、h参数定义:itocf();n ;long ze;其中:fils就是文件描述符;funcin就是锁定与解锁;表示锁定;0表示解锁;Sz就是锁定或解锁得字节数,若用0,表示从文件得当前位置到文件尾。

6、、rad功能:从描述符为得文件读信息。用法:cle ssze_t ead(nt , id *buff,si_ yt) ;返回:读到得字节数,若已到文件尾为0,若出错为-1。 在UNIX/Linux 可重定义为: ntread(it fd, ca buff, nsiged bytes) ;4、wite功能:向已打开得文件写数据.用法:nlude nitd、hssize_wie(nt , cost void buff, size_t es);返回值:若成功为已写入得字节数;出错为1.intwit(intd, chr *buff, usigned nbytes);文件位置指针文件位置指针:每个打开文

7、件都有一个与其相关联得“当前位移量”.就是从文件开始处计算得字节数.通常,读、写操作都从当前文件位置处开始,并使位移量增加所读或写得字节数。按系统默认,当打开一个文件时,除非指定O_PEND选择项,否则该位移量被设置为0,即指向文件得开始处。文件位置指针可以通过系统调用lek来移动.inclue unst、 incldesys/tys、h #iclude errno、h includ stdio、h inlue trn、h #cdestdlib、 / 程序入口*/ ntmain() npipe_fd2; pd_t pd; cha ufr100; ar wf; it_num; memet(buf

8、_r,0,sizeof(bf_); /对较大得结构体或数组进行清零操作得一种最快方法 /*创建管道*/ i(ip(ppe_fd)0) prntf(”piperte errrn); return; /创建子进程 if((pd=fok()=0)/子进程执行序列 rintf(n”); clos(piped1);/子进程先关闭了管道得写端 sleep();/让父进程先运行,这样父进程先写子进程才有内容读* i((rnu=read(pie_f0,buf_r,10))0) rintf(”%d nmers red fromhe pei %sn,_nm,bu_r); close(pip_f0); xit(0)

9、; ese if(pid)/父进程执行序列 lose(pip_f0); /父进程先关闭了管道得读端 if(write(pe_fd1,elo,5)!=1) prif(pent rite1ello!n”); f(write(ppe_d,Pi”,5)!=1) pitf(”parnt wrte2 Pi!); clo(ie_fd1); waiti(pi,NUL,0); /等待子进程结束*/ exi(); return0; 4、命名管道通信命名管道:命名管道与无名管道基本相同,但也有不同点:无名管道只能有父进程使用;但就是通过命名管道,不相关得进程也能交换数据。客户机实现数据得发送,服务器实现数据接收。1

10、、创建用kifo或mknd创建一个命名管道。以mkfifo为例:iclude#iclde sssta、i kfifo(concar *io_name, mode_t mde); /成功返回0,否则为12、使用 管道一经创建,就可向普通文件一样使用.可通过系统调用open,oe,rea,ri,unlnk等进行操作。FIFO读进程: incue#inlud erro、 clud fntl、 ilude incslb、h inclde srig、 defie IFO mfo /*程序入口*/it mai(t c,cha* rg) abur100; int fd; it nread; pitf(”Pr

11、eparin fr rdig bytes、n); memset(br,0,sizef(buf_r)); 打开管道/ fd=oen(FO,ORONL|O_NONBLOK,0); if(f=-1) perrr(pe); it(1); while(1) me(bur,,sief(uf_r); i((nread=rea(d,bufr,10)=-1) if(errno=AGAN) rn(” data ytn”); rinf(eads fro FIFn,buf_); slep(); /后面三句话就是不会被运行到得,但不会影响程序运行得效果当程序在上面得死循环中执行时收到信号后会马上结束运行而没有执行后面得

12、三句话。* lose(fd); /关闭管道 pus(); /暂停,等待信号 unlink(FO); /删除文件 IFO写进程:ncude sys/types、h #nclude ss/stat、h inclue errno、 ie #inud std、h dedefineFIFO_EVR myffo” /* *程序入口 */t mn(in rgc,char av) i fd; h wbuf100; intwrte; 创建有名管道/ f(mkfifo(FIFO_SERE,_EAT|_ECL_RDW) include eno、h incud sio、h inue string、h incudesd

13、lib、h / 程序入口 / in man() int pipfd; pd_t id; char b_r100; ch*_wbu; int _nu; memst(r,,izeof(buf_r)); *创建管道/ if(pie(pipe_fd)) pritf(pipe ceterorn”); etu ; /创建子进程*/ f((pid=for())=0) /子进程执行序列 rintf(n); clse(ppefd1);/子进程先关闭了管道得写端 lep();/让父进程先运行,这样父进程先写子进程才有内容读*/ if((r_u=ead(pip_fd,buf_r,100)0) prntf(”%dnb

14、rsread from the pipe is %s”,_num,buf); cloe(pipe_fd0); eit(); els if(pid0) /父进程执行序列 close(iped0); /父进程先关闭了管道得读端 if(wrte(pe_fd,”Hello”,5)!=1) printf(aret wrt Hello!n”); f(wite(ppe_fd1, pe,5)!1) i(parenwrite2Pipe!n); coe(pip_d1); watid(pd,0);/等待子进程结束* xit(); etu 0; 任务2:命名管道通信FIFO读进程: #iclde sy/tpe、h i

15、nlude s/stt、h clude ero、h icude fnl、h ilude ncludesdi、h #include #dein IFO ”/tpmyffo” /程序入口*/it min(t arc,hr* agv) chr buf_100; in fd; it nrad; printf(”Prepaig fo eadingbyes、n”); mee(uf_r,0,ieof(buf)); /打开管道*/ fdopen(FIFO,_RONLY|ONONBLOC,0); if(fd=1) peror(”open”); exit(1); hle(1) met(br,0,szf(bu_r)

16、; if(nea=rea(fd,uf,100))=1) i(ero=EAGAIN) pri(no ata yetn); prnf(”readsfom FIFOn,b_r); sep(1); /后面三句话就是不会被运行到得,但不会影响程序运行得效果当程序在上面得死循环中执行时收到信号后会马上结束运行而没有执行后面得三句话。* cloe(fd); /关闭管道 pause(); /暂停,等待信号 unlik(O);/删除文件FIFO写进程:#incue sys/types、h incue #iue #nclud stlib、h include sting、h efine FIO_ERVER ”tmp

17、/myfio * *程序入口 */ intmai(itargc,ar* arv) in d; chr _buf10; int nwrte; /*创建有名管道/ f(mkfifo(IF_ERE,O_CRET_EXCLORDWR)0)&(errn!EXIST)) printf(canotcrete ifservern”); 打开管道* fd=open(FIFO_SERVER,OROLY|O_NONBLOC,0); if(fd=-1) perror(”ope); exit(1); 入参检测*/ if(arc=1) printf(”Please sndsmthngn”); exi(1); stcpy(

18、w_f,av1); * 向管道写入数据/ if(nwr=rte(fd,bu,100))=1) f(eno=EAGAIN) ntf(TheI s not ead yet、Peas tr later”); else print(riteso the IFOn,wbuf); cos(d); /关闭管道 retur 0; 第8章:总结 此次课程设计-管道通信,让我实实在在地锻炼了自己得动手能力,基本操作以熟练掌握。设计中地任务一比较简单,只就是设计一个程序实现管道通信,通过查资料可以顺利完成;但就是任务二命名管道设计,涉及到了头文件、服务器程序与客户端程序,三者要在同一台计算机中,两个不同得终端上实现通信。服务器程序设计操作中没有出现什么问题,但就是在连接客户端程序时,客户端程序出错,编译出现错误,导致通信出现错误.通过向老师请教与同学询问,基本有些了解,但还就是出现一些解决不了得问题,还需要多加联系然后多查资料,认真克服困难。 通过这次课程设计,我感觉到了,编程还就是很有趣得一件事情,这次设计充分锻炼了我得动手能力,思维能力,设计能力,更重要得就是合作精神,大家基础都有点差,但可以主动找不足,主动查询资料,询问同学与请教老师,充分体现了新时代新青年得团结与探索精神。第9章:参考文献汤小丹,梁红兵编著计算机操作系统(第三版)西安电子科技大学出版社,007

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1