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

上传人:s9****2 文档编号:489588884 上传时间:2022-09-06 格式:DOC 页数:20 大小:209KB
返回 下载 相关 举报
操作系统-管道通信课程设计_第1页
第1页 / 共20页
操作系统-管道通信课程设计_第2页
第2页 / 共20页
操作系统-管道通信课程设计_第3页
第3页 / 共20页
操作系统-管道通信课程设计_第4页
第4页 / 共20页
操作系统-管道通信课程设计_第5页
第5页 / 共20页
点击查看更多>>
资源描述

《操作系统-管道通信课程设计》由会员分享,可在线阅读,更多相关《操作系统-管道通信课程设计(20页珍藏版)》请在金锄头文库上搜索。

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

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

3、 :系统环境444第二章 :设计目的4第三章 :总体设计55666第四章 :详细设计8810第五章 :调试与测试13第六章 :设计中遇到的问题与解决方法15第七章 :源程序清单和执行结果与分析16第八章 :总结20第九章 :参考文献20第一章 :系统环境IntelRCore1Microsoft Windows XP Professional 版本2002 Service Pack 32Vmware Workstation 10.0.1 build-13797763Red Hat Linux 9第二章 :设计目的实践操作系统原理知识,根据题目要求设计、实现进程的管道通信,并且在虚拟机中模拟的li

4、nux系统中运行检测。第三章 :总体设计 无名管道读写示意图 命名管道操作示意图FIFO写进程:第四章 :详细设计管道用于不同进程间通信。通常先创建一个管道,再通过fork函数创建一个子进程,该子进程会继承父进程创建的管道。须知事项:必须在系统调用fork前调用pipe,否如此子进程将不会继承文件描述符。否如此,会创建两个管道,因为父子进程共享同一段代码段,都会各自调用pipe,即建立两个管道,出现异常错误。 父进程通过管道向服务器发布命令,然后由服务器执行命令。()创建一个新进程。用法:int fork()其中返回int取值意义如下:0:创建子进程,从子进程返回的id值0:从父进程返回的子进

5、程id值-1:创建失败2.lockf(files,function,size)用作锁定文件的某些段或者整个文件。头文件:#include参数定义:int lockf(files,function,size);int files,function;long size;其中:files是文件描述符;function是锁定和解锁;1表示锁定;0表示解锁;Size是锁定或解锁的字节数,假如用0,表示从文件的当前位置到文件尾。3.read功能:从描述符为filedes的文件读信息。用法:#include ssize_tread(int filedes, void *buff, size_t nbytes

6、) ;返回:读到的字节数,假如已到文件尾为0,假如出错为-1。 在UNIX/Linux 可重定义为: intread(int fd, char *buff, unsigned nbytes) ;4.write功能:向已打开的文件写数据。用法:#include ssize_t write(int filedes, const void * buff, size_t nbytes) ;返回值:假如成功为已写入的字节数;出错为-1。intwrite(int fd, char *buff, unsigned nbytes) ;文件位置指针文件位置指针:每个打开文件都有一个与其相关联的“当前位移量。是从

7、文件开始处计算的字节数。通常,读、写操作都从当前文件位置处开始,并使位移量增加所读或写的字节数。按系统默认,当打开一个文件时,除非指定O_APPEND选择项,否如此该位移量被设置为0,即指向文件的开始处。文件位置指针可以通过系统调用lseek来移动。#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);

8、/对较大的结构体或数组进展清零操作的一种最快方法 /*创建管道*/ 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) /父进程执行序列 close(pipe_fd0); /父进程先关闭了管道的读端 if(write(pipe_fd1,Hello,5)!=-1) printf(parent write1 Hello!n); if(write(pipe_fd1, Pipe,5)!=-1) printf(parent

9、write2 Pipe!n); close(pipe_fd1); waitpid(pid,NULL,0); /*等待子进程完毕*/ exit(0); return 0; 命名管道 :命名管道和无名管道根本一样,但也有不同点:无名管道只能有父进程使用;但是通过命名管道,不相关的进程也能交换数据。客户机实现数据的发送,服务器实现数据接收。用mkfifo或mknod创建一个命名管道。以mkfifo为例:#include#includeint mkfifo(const char *fifo_name, mode_t mode);/成功返回0,否如此为-12、使用管道一经创建,就可向普通文件一样使用。可

10、通过系统调用open,close,read,write,unlink等进展操作。FIFO读进程: #include #include #include #include #include #include #include #define FIFO 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(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); /*后面三句话是不会被运行到的,但不会影响程序运行的效果当程序

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号