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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

操作系统管道通信课程设计Word格式文档下载.docx

1、鉴于此,本操作系统课程涉及的实验均在Linux环境下进行。这就要求大家:(1)熟悉Linux的操作和开发环境;(2)具有C语言知识(Linux操作系统大约90%的源码是用C语言编写)。我们的设计和实验将在Windows xp环境下,基于虚拟机软件VMWare软件进行安装。学习计算机软件技术,特别是计算机操作系统技术,除了需要刻苦努力外,还需要掌握软件和操作系统的原理与设计技巧。如何学习和掌握操作系统技术的原理与实际技巧呢?除了听课和读书之外,最好的方法恐怕就是在实践中练习。例如,自己设计一个小型操作系统,多使用操作系统,多阅读和分析操作源代码等。但由于我们的条件和学时有限,在理论学习过程中没有

2、给同学们提供更多的实验机会。管道通信,通过在两个进程间创建通道,一个写信息通过通道传送给另一个进程并且读出来,同过实践让我们了解了什么是管道通信机制,实现了程序进程间的通信。积极通过合作,完成任务。第一章:系统环境1.1硬件环境Intel(R)Core2 Duo CPU E7500 2.93GHz 2.00GB内存1.2软件环境1)Microsoft Windows XP Professional 版本2002 Service Pack 32)Vmware Workstation 10.0.1 build-13797763)Red Hat Linux 9第二章:设计目的实践操作系统原理知识,根

3、据题目要求设计、实现进程的管道通信,并且在虚拟机中模拟的linux系统中运行检测。第三章:总体设计3.1程序设计组成框图 无名管道读写示意图 命名管道操作示意图3.2流程图3.2.1匿名管道通信C/S流程图3.2.2命名管道通信C/S流程图FIFO写进程:第四章:详细设计4.1匿名管道通信管道用于不同进程间通信。通常先创建一个管道,再通过fork函数创建一个子进程,该子进程会继承父进程创建的管道。注意事项:必须在系统调用fork()前调用pipe(),否则子进程将不会继承文件描述符。否则,会创建两个管道,因为父子进程共享同一段代码段,都会各自调用pipe(),即建立两个管道,出现异常错误。 父

4、进程通过管道向服务器发布命令,然后由服务器执行命令。1.fork()创建一个新进程。用法: int fork()其中返回int取值意义如下:0:创建子进程,从子进程返回的id值从父进程返回的子进程id值-1:创建失败2.lockf(files,function,size)用作锁定文件的某些段或者整个文件。头文件:#include 参数定义:int lockf(files,function,size);int files,function;long size;其中:files是文件描述符;function是锁定和解锁;1表示锁定;0表示解锁;Size是锁定或解锁的字节数,若用0,表示从文件的当前

5、位置到文件尾。3.read功能:从描述符为filedes的文件读信息。ssize_t read(int filedes, void *buff, size_t nbytes) ;返回:读到的字节数,若已到文件尾为0,若出错为-1。 在UNIX/Linux 可重定义为:int read(int fd, char *buff, unsigned nbytes) ;4.write向已打开的文件写数据。ssize_t write(int filedes, const void * buff, size_t nbytes) ;返回值:若成功为已写入的字节数;出错为-1。int write(int fd,

6、 char *buff, unsigned nbytes) ;文件位置指针文件位置指针:每个打开文件都有一个与其相关联的“当前位移量”。是从文件开始处计算的字节数。通常,读、写操作都从当前文件位置处开始,并使位移量增加所读或写的字节数。按系统默认,当打开一个文件时,除非指定O_APPEND选择项,否则该位移量被设置为0,即指向文件的开始处。文件位置指针可以通过系统调用lseek来移动。sys/types.herrno.hstdio.hstring.hstdlib.h/* * 程序入口 * */ int main() int pipe_fd2; pid_t pid; char buf_r100;

7、 char* p_wbuf; int r_num; memset(buf_r,0,sizeof(buf_r); /对较大的结构体或数组进行清零操作的一种最快方法 /*创建管道*/ if(pipe(pipe_fd)%d numbers read from the pipe is %sn,r_num,buf_r); close(pipe_fd0); exit(0); else if(pid0) /父进程执行序列 /父进程先关闭了管道的读端 if(write(pipe_fd1,Hello,5)!=-1) parent write1 Hello! Pipeparent write2 Pipe! wai

8、tpid(pid,NULL,0); /*等待子进程结束*/ return 0;4.2命名管道通信命名管道 :命名管道和无名管道基本相同,但也有不同点:无名管道只能有父进程使用;但是通过命名管道,不相关的进程也能交换数据。客户机实现数据的发送,服务器实现数据接收。1.创建用mkfifo或mknod创建一个命名管道。以mkfifo为例: #include int mkfifo(const char *fifo_name, mode_t mode); /成功返回0,否则为-12、使用 管道一经创建,就可向普通文件一样使用。可通过系统调用open,close,read,write,unlink等进行操

9、作。FIFO读进程:fcntl.h#define FIFO myfifo /*程序入口*/int main(int argc,char* argv) int fd; int nread;Preparing for reading bytes.n /*打开管道*/ fd=open(FIFO,O_RDONLY|O_NONBLOCK,0); if(fd=-1) perror(open exit(1); while(1) if(nread=read(fd,buf_r,100)=-1) if(errno=EAGAIN) no data yetnread %s from FIFOn,buf_r); sle

10、ep(1); /*后面三句话是不会被运行到的,但不会影响程序运行的效果当程序在上面的死循环中执行时收到信号后会马上结束运行而没有执行后面的三句话。*/ close(fd); /关闭管道 pause(); /暂停,等待信号 unlink(FIFO); /删除文件 #define FIFO_SERVER char w_buf100; int nwrite; /*创建有名管道*/ if(mkfifo(FIFO_SERVER,O_CREAT|O_EXCL|O_RDWR)0)&(errno!=EEXIST) cannot create fifoservern fd=open(FIFO_SERVER,O_

11、WRONLY |O_NONBLOCK,0); /*入参检测*/ if(argc=1) Please send somethingn exit(-1); strcpy(w_buf,argv1); /* 向管道写入数据 */ if(nwrite=write(fd,w_buf,100)=-1) The FIFO has not been read yet.Please try latern else write %s to the FIFOn,w_buf); /关闭管道 第五章:调试与测试运行匿名管道通信以及运行命名管道通信读进程结果如下:打开另外一个终端,运行写进程结果如下:同时读进程结果发生变化

12、如下:第六章:设计中遇到的问题及解决方法 1、 由于课程涉及UNIX管道通信模式较少,刚开始做课程设计时感觉无从下手,后来通过看书以及上网查询相关资料有些头绪。2、对于虚拟机与主机的交互搞了好久但是最后结果不理想,也没搞成功,试了用ftp方式相互连接,以及通过VMware Tools也没有成功。后来,通过问学长和同学终于解决了。通过此事,我知道知识自己主动探索实践固然好,但学习他人已有的经验学的知识更多更快。3、对于C语言中open、write等函数掌握的并不好,这是由于长期不联系C语言所致,一门语言要想精通必须通过不断的联系才行。第七章:源程序清单和执行结果及分析任务1:匿名管道通信任务2:

13、命名管道通信/tmp/myfifo第八章:总结 此次课程设计管道通信,让我实实在在地锻炼了自己的动手能力,基本操作以熟练掌握。设计中地任务一比较简单,只是设计一个程序实现管道通信,通过查资料可以顺利完成;但是任务二命名管道设计,涉及到了头文件、服务器程序和客户端程序,三者要在同一台计算机中,两个不同的终端上实现通信。服务器程序设计操作中没有出现什么问题,但是在连接客户端程序时,客户端程序出错,编译出现错误,导致通信出现错误。通过向老师请教和同学询问,基本有些了解,但还是出现一些解决不了的问题,还需要多加联系然后多查资料,认真克服困难。 通过这次课程设计,我感觉到了,编程还是很有趣的一件事情,这次设计充分锻炼了我的动手能力,思维能力,设计能力,更重要的是合作精神,大家基础都有点差,但可以主动找不足,主动查询资料,询问同学和请教老师,充分体现了新时代新青年的团结和探索精神。第九章:参考文献汤小丹,梁红兵编著计算机操作系统(第三版)西安电子科技大学出版社,2007

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

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