![操作系统-管道通信课程设计课件_第1页](http://file3.renrendoc.com/fileroot_temp3/2021-12/17/14955375-99a4-4a6c-960d-7841b3f67bad/14955375-99a4-4a6c-960d-7841b3f67bad1.gif)
![操作系统-管道通信课程设计课件_第2页](http://file3.renrendoc.com/fileroot_temp3/2021-12/17/14955375-99a4-4a6c-960d-7841b3f67bad/14955375-99a4-4a6c-960d-7841b3f67bad2.gif)
![操作系统-管道通信课程设计课件_第3页](http://file3.renrendoc.com/fileroot_temp3/2021-12/17/14955375-99a4-4a6c-960d-7841b3f67bad/14955375-99a4-4a6c-960d-7841b3f67bad3.gif)
![操作系统-管道通信课程设计课件_第4页](http://file3.renrendoc.com/fileroot_temp3/2021-12/17/14955375-99a4-4a6c-960d-7841b3f67bad/14955375-99a4-4a6c-960d-7841b3f67bad4.gif)
![操作系统-管道通信课程设计课件_第5页](http://file3.renrendoc.com/fileroot_temp3/2021-12/17/14955375-99a4-4a6c-960d-7841b3f67bad/14955375-99a4-4a6c-960d-7841b3f67bad5.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、计算机操作系统课程设计报告课程名称: 操作系统 设计题目: 管道通信 指导教师: * 班 级: * 学 号: * 学生姓名: * 同组人员: * 计算机科学与工程学院2014 年 6 月 19 日成 绩: 评 语: 前言:Linux 操作系统是一个向用户开放源码的免费的类 UNIX 操作系统。它为在校学生学习操作系统课程提供了一个看得见摸得着的范例。对于学生正确理解,掌握操作系统的基本知识具有重要意义。鉴于此,本操作系统课程涉及的实验均在 Linux 环境下进行。这就要求大家:(1)熟悉 Linux 的操作和开发环境;(2)具有 C 语言知识(Linux 操作系统大约 90%的源码是用 C 语
2、言编写)。我们的设计和实验将在 Windows xp 环境下,基于虚拟机软件 VMWare 软件进行安装。学习计算机软件技术,特别是计算机操作系统技术,除了需要刻苦努力外,还需要掌握软件和操作系统的原理与设计技巧。如何学习和掌握操作系统技术的原理与实际技巧呢?除了听课和读书之外,最好的方法恐怕就是在实践中练习。例如,自己设计一个小型操作系统,多使用操作系统,多阅读和分析操作源代码等。但由于我们的条件和学时有限,在理论学习过程中没有给同学们提供更多的实验机会。管道通信,通过在两个进程间创建通道,一个写信息通过通道传送给另一个进程并且读出来,同过实践让我们了解了什么是管道通信机制,实现了程序进程间
3、的通信。积极通过合作,完成任务。目 录第一章第一章 :系统环境:系统环境.41.1 硬件环境.41.2 软件环境.4第二章第二章 :设计目的:设计目的.4第三章第三章 :总体设计:总体设计.53.1 程序设计组成框图.53.2 流程图.63.2.1 匿名管道通信 C/S 流程图.63.2.2 命名管道通信 C/S 流程图.6第四章第四章 :详细设计:详细设计.84.1 匿名管道通信.84.2 命名管道通信.10第五章第五章 :调试与测试:调试与测试.13第六章第六章 :设计中遇到的问题及解决方法:设计中遇到的问题及解决方法.15第七章第七章 :源程序清单和执行结果及分析:源程序清单和执行结果及
4、分析.16第八章第八章 : :总结总结.20第九章第九章 : :参考文献参考文献.20第 1 章:系统环境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第 2 章:设计目的实践操作系统原理知识,根据题目要求设计、实现进程的管道通信,并且在虚拟机中模拟的 linux 系统中运行
5、检测。第 3 章:总体设计3.1 程序设计组成框图程序设计组成框图 无名管道读写示意图 命名管道操作示意图3.2 流程图流程图3.2.1 匿名管道通信匿名管道通信 C/S 流程图流程图 3.2.2 命名管道通信命名管道通信 C/S 流程图流程图 FIFO 写进程: 第 4 章:详细设计4.1 匿名管道通信匿名管道通信管道用于不同进程间通信。通常先创建一个管道,再通过 fork 函数创建一个子进程,该子进程会继承父进程创建的管道。注意事项:必须在系统调用 fork()前调用 pipe() ,否则子进程将不会继承文件描述符。否则,会创建两个管道,因为父子进程共享同一段代码段,都会各自调用 pipe
6、() ,即建立两个管道,出现异常错误。 父进程通过管道向服务器发布命令,然后由服务器执行命令。1.fork()创建一个新进程。用法:int fork()其中返回 int 取值意义如下:0:创建子进程,从子进程返回的 id 值0:从父进程返回的子进程 id 值-1:创建失败2.lockf(files,function,size)用作锁定文件的某些段或者整个文件。头文件:#include参数定义:int lockf(files,function,size);int files,function;long size;其中:files 是文件描述符;function 是锁定和解锁;1 表示锁定;0 表
7、示解锁;Size 是锁定或解锁的字节数,若用 0,表示从文件的当前位置到文件尾。3.read功能:从描述符为filedes 的文件读信息。用法:#include ssize_t read(int filedes, void *buff, size_t nbytes) ;返回:读到的字节数,若已到文件尾为 0,若出错为-1。 在 UNIX/Linux 可重定义为: intread(int fd, char *buff, unsigned nbytes) ;4.write功能:向已打开的文件写数据。用法:#include ssize_t write(int filedes, const void
8、* buff, size_t nbytes) ;返回值:若成功为已写入的字节数;出错为-1。int write(int fd, char *buff, unsigned nbytes) ;文件位置指针文件位置指针:每个打开文件都有一个与其相关联的“当前位移量” 。是从文件开始处计算的字节数。通常,读、写操作都从当前文件位置处开始,并使位移量增加所读或写的字节数。按系统默认,当打开一个文件时,除非指定 O_APPEND 选择项,否则该位移量被设置为0,即指向文件的开始处。文件位置指针可以通过系统调用 lseek 来移动。#include #include #include #include #i
9、nclude #include /* * 程序入口 * */ int main() int pipe_fd2; pid_t pid; char buf_r100; char* p_wbuf; int r_num; memset(buf_r,0,sizeof(buf_r); /对较大的结构体或数组进行清零操作的一种最快方法 /*创建管道*/ if(pipe(pipe_fd)0) printf(%d numbers read from the pipe is %sn,r_num,buf_r); close(pipe_fd0); exit(0); else if(pid0) /父进程执行序列 clo
10、se(pipe_fd0); /父进程先关闭了管道的读端 if(write(pipe_fd1,Hello,5)!=-1) printf(parent write1 Hello!n); if(write(pipe_fd1, Pipe,5)!=-1) printf(parent write2 Pipe!n); close(pipe_fd1); waitpid(pid,NULL,0); /*等待子进程结束*/ exit(0); return 0; 4.2 命名管道通信命名管道通信命名管道 :命名管道和无名管道基本相同,但也有不同点:无名管道只能有父进程使用;但是通过命名管道,不相关的进程也能交换数据。
11、客户机实现数据的发送,服务器实现数据接收。1.创建用 mkfifo 或 mknod 创建一个命名管道。以 mkfifo 为例:#include #include int mkfifo(const char *fifo_name, mode_t mode);/成功返回 0,否则为-12、使用管道一经创建,就可向普通文件一样使用。可通过系统调用open,close,read,write,unlink 等进行操作。FIFO 读进程: #include #include #include #include #include #include #include #define FIFO myfifo /
12、*程序入口*/int main(int argc,char* argv) char buf_r100; int fd; int nread; printf(Preparing for reading bytes.n); memset(buf_r,0,sizeof(buf_r); /*打开管道*/ fd=open(FIFO,O_RDONLY|O_NONBLOCK,0); if(fd=-1) perror(open); exit(1); while(1) memset(buf_r,0,sizeof(buf_r); if(nread=read(fd,buf_r,100)=-1) if(errno=E
13、AGAIN) printf(no data yetn); printf(read %s from FIFOn,buf_r); sleep(1); /*后面三句话是不会被运行到的,但不会影响程序运行的效果当程序在上面的死循环中执行时收到信号后会马上结束运行而没有执行后面的三句话。*/ close(fd); /关闭管道 pause(); /暂停,等待信号 unlink(FIFO); /删除文件 FIFO 写进程:#include #include #include #include #include #include #include #define FIFO_SERVER myfifo /* *
14、 程序入口 * */ int main(int argc,char* argv) int fd; char w_buf100; int nwrite; /*创建有名管道*/ if(mkfifo(FIFO_SERVER,O_CREAT|O_EXCL|O_RDWR)0)&(errno!=EEXIST) printf(cannot create fifoservern); /*打开管道*/ fd=open(FIFO_SERVER,O_WRONLY |O_NONBLOCK,0); if(fd=-1) perror(open); exit(1); /*入参检测*/ if(argc=1) prin
15、tf(Please send somethingn); exit(-1); strcpy(w_buf,argv1); /* 向管道写入数据 */ if(nwrite=write(fd,w_buf,100)=-1) if(errno=EAGAIN) printf(The FIFO has not been read yet.Please try latern); else printf(write %s to the FIFOn,w_buf); close(fd); /关闭管道 return 0; 第 5 章:调试与测试运行匿名管道通信以及运行命名管道通信读进程结果如下: 打开另外一个终端,运行
16、写进程结果如下:同时读进程结果发生变化如下:第 6 章:设计中遇到的问题及解决方法 1、 由于课程涉及 UNIX 管道通信模式较少,刚开始做课程设计时感觉无从下手,后来通过看书以及上网查询相关资料有些头绪。2、对于虚拟机与主机的交互搞了好久但是最后结果不理想,也没搞成功,试了用 ftp方式相互连接,以及通过 VMware Tools 也没有成功。后来,通过问学长和同学终于解决了。通过此事,我知道知识自己主动探索实践固然好,但学习他人已有的经验学的知识更多更快。3、对于 C 语言中 open、write 等函数掌握的并不好,这是由于长期不联系 C 语言所致,一门语言要想精通必须通过不断的联系才行
17、。第 7 章:源程序清单和执行结果及分析任务 1:匿名管道通信#include #include #include #include #include #include /* * 程序入口 * */ int main() int pipe_fd2; pid_t pid; char buf_r100; char* p_wbuf; int r_num; memset(buf_r,0,sizeof(buf_r); /*创建管道*/ if(pipe(pipe_fd)0) printf(%d numbers read from the pipe is %sn,r_num,buf_r); close(pi
18、pe_fd0); exit(0); else if(pid0) /父进程执行序列 close(pipe_fd0); /父进程先关闭了管道的读端 if(write(pipe_fd1,Hello,5)!=-1) printf(parent write1 Hello!n); if(write(pipe_fd1, Pipe,5)!=-1) printf(parent write2 Pipe!n); close(pipe_fd1); waitpid(pid,NULL,0); /*等待子进程结束*/ exit(0); return 0; 任务 2:命名管道通信FIFO 读进程: #include #inc
19、lude #include #include #include #include #include #define FIFO /tmp/myfifo /*程序入口*/int main(int argc,char* argv) char buf_r100; int fd; int nread; printf(Preparing for reading bytes.n); memset(buf_r,0,sizeof(buf_r); /*打开管道*/ fd=open(FIFO,O_RDONLY|O_NONBLOCK,0); if(fd=-1) perror(open); exit(1); while
20、(1) memset(buf_r,0,sizeof(buf_r); if(nread=read(fd,buf_r,100)=-1) if(errno=EAGAIN) printf(no data yetn); printf(read %s from FIFOn,buf_r); sleep(1); /*后面三句话是不会被运行到的,但不会影响程序运行的效果当程序在上面的死循环中执行时收到信号后会马上结束运行而没有执行后面的三句话。*/ close(fd); /关闭管道 pause(); /暂停,等待信号 unlink(FIFO); /删除文件 FIFO 写进程:#include #include
21、#include #include #include #include #include #define FIFO_SERVER /tmp/myfifo /* * 程序入口 * */ int main(int argc,char* argv) int fd; char w_buf100; int nwrite; /*创建有名管道*/ if(mkfifo(FIFO_SERVER,O_CREAT|O_EXCL|O_RDWR)0)&(errno!=EEXIST) printf(cannot create fifoservern); /*打开管道*/ fd=open(FIFO_SERVER,O_WRONLY |O_NONBLOCK,0); if(fd=-1) perror(open); ex
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- Tetrahydropiperine-Standard-生命科学试剂-MCE
- MTH1-ligand-1-生命科学试剂-MCE
- Diludine-Standard-生命科学试剂-MCE
- Cimicifuga-racemosa-extract-生命科学试剂-MCE
- 4-4-Dibromobiphenyl-NSC-2098-生命科学试剂-MCE
- 智能设备生产与销售合同书
- 绘本故事中的教育意义读后感
- 2025年涂镀中间体合作协议书
- 诸暨环氧树脂地坪施工方案
- 小学英语单词故事
- 慢性病患者门诊身份管理方案
- 学校安全干事述职
- 2025年高考英语一轮复习讲义(新高考)第2部分语法第23讲状语从句(练习)(学生版+解析)
- JJF(京) 68-2021 电能表现场校验标准装置校准规范
- 路桥工程检测技术 课件 1公路工程试验检测管理
- NB/T 11459-2023煤矿井下直流电法勘探规程
- 2025高中物理《课时作业》人教版选择性必修第1册课时分层作业(八)
- 脑卒中-脑卒中的康复治疗
- 十七个岗位安全操作规程手册
- 爆花(2023年陕西中考语文试卷记叙文阅读题及答案)
- 疫情统计学智慧树知到答案2024年浙江大学
评论
0/150
提交评论