操作系统管道通信_通信电子-数据通信与网络.pdf
《操作系统管道通信_通信电子-数据通信与网络.pdf》由会员分享,可在线阅读,更多相关《操作系统管道通信_通信电子-数据通信与网络.pdf(25页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、-.-考试资料-城建学院 操作系统课程设计说明书 设计题目:管道通信 专 业:计算机科学与技术 指导教师:邵国金 郭猛 薛冰 班 级:0814102 学 号:081410217 姓 名:金 贺 同 组 人:乾坤 邵光光 计算机科学与工程系 2011 年 1 月 10 日-2-前言 课程设计是检测学生课程效果的重要手段,是训练学生通过所学的知识解决 实际问题的重要方式,同时也是实践性教学中的一个重要环节,它以某以课程为 基础,可以涉及和课程相关的各个方面,是一门独立于课程之外的特殊课程。课 程设计是让学生对所学的课程更全面的学习和应用,理解和掌握课程的相关知识。操作系统是一门重要的专业课,是计算
2、机理论和应用的核心基础课程。操作系统课程设计,是一次对多学知识的综合演练,要求学生在操作系统的设计理念、整体机构、模块划分、数据结构的选择和应用、算法的设计及其实现等方面,加深对课程基本容的理解,同时,在课程设计方法以及上机操作等基本技能和科学作风方面收到比较系统和严格的训练。在这次的课程设计中我们选择的题目是进程间通信消息机制的设计,实现消息的创建、发送和接收及在 server 端创建一个服务函数,从而形成 C/S 通讯模式。消息机制是消息通过消息队列的方式进行进程间消息的传递,通过此次课程设计,全面理解消息机制进程间通信方法。实现把死板的课本知识变得生动有趣,激发了学生的积极性。把学过的计
3、算机操作系统的知识强化,能够把课堂上的知识通过自己设计的程序表示出来,加深了岁理论知识的理解目的。名金贺同组人乾坤邵光光计算机科学与工程系年月日考试资料前言课程设计是检测学生课程效果的重要手段是训练学生通过所学的知识解决实际问题的重要方式同时也是实践性教学中的一个重要环节它以某以课程为基础可以涉及和 和掌握课程的相关知识操作系统是一门重要的专业课是计算机理论和应用的核心基础课程操作系统课程设计是一次对多学知识的综合演练要求学生在操作系统的设计理念整体机构模块划分数据结构的选择和应用算法的设计及其实现 的训练在这次的课程设计中我们选择的题目是进程间通信消息机制的设计实现消息的创建发送和接收及在端
4、创建一个服务函数从而形成通讯模式消息机制是消息通过消息队列的方式进行进程间消息的传递通过此次课程设计全面理解-3-目 录 一、.4 二、.4 三、设 计 题 目 及 要求.4(1)设计管道通信 4(2)设计命名管道.4 四、总 体 设计.4 五、详 细 设计.6 1、实现管道通信.6 2、命名管道设计.8 六、调 试 与 测 试 方法.12 七、执 行 结 果 及 分析.13 八、源 程 序 清单.14 九、心 得 体会.19 名金贺同组人乾坤邵光光计算机科学与工程系年月日考试资料前言课程设计是检测学生课程效果的重要手段是训练学生通过所学的知识解决实际问题的重要方式同时也是实践性教学中的一个重
5、要环节它以某以课程为基础可以涉及和 和掌握课程的相关知识操作系统是一门重要的专业课是计算机理论和应用的核心基础课程操作系统课程设计是一次对多学知识的综合演练要求学生在操作系统的设计理念整体机构模块划分数据结构的选择和应用算法的设计及其实现 的训练在这次的课程设计中我们选择的题目是进程间通信消息机制的设计实现消息的创建发送和接收及在端创建一个服务函数从而形成通讯模式消息机制是消息通过消息队列的方式进行进程间消息的传递通过此次课程设计全面理解-4-十、参 考 文 献.19 三、系统环境 1、硬件环境:Intel(R)Core(TM)2 Duo CPU E7200 2.53GHz 1.59GHz,2
6、.00GB 的存 2、软件环境 Microsoft Windows XP Professtonal 版本 2002 Service Pack 3 名金贺同组人乾坤邵光光计算机科学与工程系年月日考试资料前言课程设计是检测学生课程效果的重要手段是训练学生通过所学的知识解决实际问题的重要方式同时也是实践性教学中的一个重要环节它以某以课程为基础可以涉及和 和掌握课程的相关知识操作系统是一门重要的专业课是计算机理论和应用的核心基础课程操作系统课程设计是一次对多学知识的综合演练要求学生在操作系统的设计理念整体机构模块划分数据结构的选择和应用算法的设计及其实现 的训练在这次的课程设计中我们选择的题目是进程间
7、通信消息机制的设计实现消息的创建发送和接收及在端创建一个服务函数从而形成通讯模式消息机制是消息通过消息队列的方式进行进程间消息的传递通过此次课程设计全面理解-5-四、设计目的 利用 UNIX系统提供的管道机制实现进程间的通信。(1)管道通信。利用 pipe()和 lockf()系统调用,编写程序,实现同族进程间的通信。使用系统调用 pipe()建立一条管道线;创建子进程 P1,P2,。子进程 Pi 分别向管道各写信息,而父进程则从管道中读出来自于各子进程的信息,实现进程家族间无名管道通讯。扩展之,使之成为客户/服务器模式,并完成一定的任务(自己定义)。(2)命名管道通信:利用 mkfifo(n
8、ame,mode)或 mknod(name,mode,0)创建一个命名管道,然后利用它和文件部分系统调用实现不同进程间的通信。改造之,使之成为客户/服务器模式,并完成一定的任务(自己定义)。名金贺同组人乾坤邵光光计算机科学与工程系年月日考试资料前言课程设计是检测学生课程效果的重要手段是训练学生通过所学的知识解决实际问题的重要方式同时也是实践性教学中的一个重要环节它以某以课程为基础可以涉及和 和掌握课程的相关知识操作系统是一门重要的专业课是计算机理论和应用的核心基础课程操作系统课程设计是一次对多学知识的综合演练要求学生在操作系统的设计理念整体机构模块划分数据结构的选择和应用算法的设计及其实现 的
9、训练在这次的课程设计中我们选择的题目是进程间通信消息机制的设计实现消息的创建发送和接收及在端创建一个服务函数从而形成通讯模式消息机制是消息通过消息队列的方式进行进程间消息的传递通过此次课程设计全面理解-6-五、总体设计 1.fork()创建一个新进程。用法:int fork()其中返回 int 取值意义如下:0:创建子进程,从子进程返回的 id 值 0:从父进程返回的子进程 id 值-1:创建失败 2.lockf(files,function,size)用作锁定文件的某些段或者整个文件。头文件:#include 参数定义:int lockf(files,function,size);int f
10、iles,function;long size;其中:files 是文件描述符;function 是锁定和解锁;1 表示锁定;0 表示解锁;Size 是锁定或解锁的字节数,若用 0,表示从文件的当前位置到文件尾。3.read 功能:从描述符为 filedes 的 文件读信息。用法:名金贺同组人乾坤邵光光计算机科学与工程系年月日考试资料前言课程设计是检测学生课程效果的重要手段是训练学生通过所学的知识解决实际问题的重要方式同时也是实践性教学中的一个重要环节它以某以课程为基础可以涉及和 和掌握课程的相关知识操作系统是一门重要的专业课是计算机理论和应用的核心基础课程操作系统课程设计是一次对多学知识的综
11、合演练要求学生在操作系统的设计理念整体机构模块划分数据结构的选择和应用算法的设计及其实现 的训练在这次的课程设计中我们选择的题目是进程间通信消息机制的设计实现消息的创建发送和接收及在端创建一个服务函数从而形成通讯模式消息机制是消息通过消息队列的方式进行进程间消息的传递通过此次课程设计全面理解-7-#include ssize_t read(int filedes,void*buff,size_t nbytes);返回:读到的字节数,若已到文件尾为 0,若出错为-1。在 UNIX/Linux 可重定义为:int read(int fd,char*buff,unsigned nbytes);4.w
12、rite 功能:向已打开的文件写数据。用法:#include ssize_t write(int filedes,const void*buff,size_t nbytes);返回值:若成功为已写入的字节数;出错为-1。int write(int fd,char*buff,unsigned nbytes);文件位置指针 文件位置指针:每个打开文件都有一个与其相关联的“当前位移量”。是从文件开始处计算的字节数。通常,读、写操作都从当前文件位置处开始,并使位移量增加所读或写的字节数。按系统默认,当打开一个文件时,除非指定 O_APPEND 选择项,否则该位移量被设置为 0,即指向文件的开始处。文件
13、位置指针可以通过系统调用 lseek 来移动。5.创建 用 mkfifo 或 mknod 创建一个命名管道。以 mkfifo 为例:#include#include int mkfifo(const char*fifo_name,mode_t mode);/成功返回 0,否则为-1 6 signal(sig,function)允许调用进程控制软中断信号的处理。头文件:#include 参数定义 signal(sig,function)int sig;void(*function)();返回值:成功时返回旧的(以前)函数描述,失败时返回 SIG_ERR。7、client、server 可以以 c
14、lient/server 方式使用 FIFO。如果一个服务器有多个客户时,每个客户可通过一个well_known FIFO 服务器连接。连接后可以通过 well_known FIFO 向服务器发送请求,所发信息的长度必须 PIPE_BUF(4096)。流程图 名金贺同组人乾坤邵光光计算机科学与工程系年月日考试资料前言课程设计是检测学生课程效果的重要手段是训练学生通过所学的知识解决实际问题的重要方式同时也是实践性教学中的一个重要环节它以某以课程为基础可以涉及和 和掌握课程的相关知识操作系统是一门重要的专业课是计算机理论和应用的核心基础课程操作系统课程设计是一次对多学知识的综合演练要求学生在操作系
15、统的设计理念整体机构模块划分数据结构的选择和应用算法的设计及其实现 的训练在这次的课程设计中我们选择的题目是进程间通信消息机制的设计实现消息的创建发送和接收及在端创建一个服务函数从而形成通讯模式消息机制是消息通过消息队列的方式进行进程间消息的传递通过此次课程设计全面理解-8-消息的创建、发送和接收示意图 初始化 创建一个 key 为 105、107 的消息队列 等待 msgqid1 发来消息 显示消息 接收消息 退出 收到 exit 命令 向 msgqid2 发送收到命令 创建子进程 server()创建成功?挂起 5 秒 删除消息队列 初始化 存储到文件 名金贺同组人乾坤邵光光计算机科学与工
16、程系年月日考试资料前言课程设计是检测学生课程效果的重要手段是训练学生通过所学的知识解决实际问题的重要方式同时也是实践性教学中的一个重要环节它以某以课程为基础可以涉及和 和掌握课程的相关知识操作系统是一门重要的专业课是计算机理论和应用的核心基础课程操作系统课程设计是一次对多学知识的综合演练要求学生在操作系统的设计理念整体机构模块划分数据结构的选择和应用算法的设计及其实现 的训练在这次的课程设计中我们选择的题目是进程间通信消息机制的设计实现消息的创建发送和接收及在端创建一个服务函数从而形成通讯模式消息机制是消息通过消息队列的方式进行进程间消息的传递通过此次课程设计全面理解-9-六 详细设计 1、实
17、现管道通信 编制一段程序,实现进程的管道通信。使用系统调用 pipe()建立一条管道线。两个子进程 p1 和 p2 分别向管道各写一句话:child 1 is sending message!child 2 is sending message!而父进程则从管道中读出来自于两个子进程的信息,显示在屏幕上。#include main()int i,r,p1,p2,fd2;由关键字获得消息队列 从队列接收消息 消息类型 i 为 1 时,释放队列 删除队列表项 退出 名金贺同组人乾坤邵光光计算机科学与工程系年月日考试资料前言课程设计是检测学生课程效果的重要手段是训练学生通过所学的知识解决实际问题的重
18、要方式同时也是实践性教学中的一个重要环节它以某以课程为基础可以涉及和 和掌握课程的相关知识操作系统是一门重要的专业课是计算机理论和应用的核心基础课程操作系统课程设计是一次对多学知识的综合演练要求学生在操作系统的设计理念整体机构模块划分数据结构的选择和应用算法的设计及其实现 的训练在这次的课程设计中我们选择的题目是进程间通信消息机制的设计实现消息的创建发送和接收及在端创建一个服务函数从而形成通讯模式消息机制是消息通过消息队列的方式进行进程间消息的传递通过此次课程设计全面理解-10-char buf50,s50;pipe(fd);/创建匿名管道,fd0 为读端,fd1 为写端/while(p1=f
19、ork()=-1);/创建子进程 P1,直至成功为止(p1!=-1)/if(p1=0)/子进程 P1 执行逻辑/lockf(fd1,1,0);/锁定管道写端,保证写入数据的完整性/sprintf(buf,child process P1 is sending messages!n);/在 buf 中填入准备写入管道的信息数据 printf(child processP1!n);/打印“子进程 P1 正在运行”/write(fd1,buf,50);/向管道写端 fd1 写入 buf 中的数据,写完后该数据即可以从读端fd0 读出/sleep(5);/睡眠 5 秒/lockf(fd1,0,0);/
20、解锁管道写端/exit(0);/子进程 P1 退出/else/主进程的执行逻辑/while(p2=fork()=-1);/创建第二个子进程 P2/if(p2=0)/子进程 P2 的执行逻辑/lockf(fd1,1,0);/锁定管道写端,保证数据写入完整/sprintf(buf,child process P2 is sending messages!n);/在 buf 中填入准备写入管道的信息数据 printf(child processP2!n);/打印“子进程 P2 正在运行”/write(fd1,buf,50);/向管道写端 fd1 写入 buf 中的数据,写完后该数据即可从读端 fd0
21、读出/sleep(5);/睡眠 5 秒/lockf(fd1,0,0);/解锁管道写端/exit(0);/子进程 P2 退出/以下为主进程执行逻辑/wait(0);/等待某个子进程退出/if(r=read(fd0,s,50)=-1)/从管道读端 fd0 读取 P1 或者 P2 写入的数据(视哪个子进程抢先执行到 lockf 函数)/printf(:cant read pipen);/读取失败,打印错误信息/else printf(:%sn,s);/打印出读到的信息数据/wait(0);/等待第二个子进程退出/if(r=read(fd0,s,50)=-1)/从管道读端 fd0 读取出 P1 或者
22、P2 写入的数据(视哪个子进程后执行到 lockf 函数)/名金贺同组人乾坤邵光光计算机科学与工程系年月日考试资料前言课程设计是检测学生课程效果的重要手段是训练学生通过所学的知识解决实际问题的重要方式同时也是实践性教学中的一个重要环节它以某以课程为基础可以涉及和 和掌握课程的相关知识操作系统是一门重要的专业课是计算机理论和应用的核心基础课程操作系统课程设计是一次对多学知识的综合演练要求学生在操作系统的设计理念整体机构模块划分数据结构的选择和应用算法的设计及其实现 的训练在这次的课程设计中我们选择的题目是进程间通信消息机制的设计实现消息的创建发送和接收及在端创建一个服务函数从而形成通讯模式消息机
23、制是消息通过消息队列的方式进行进程间消息的传递通过此次课程设计全面理解-11-printf(:cant read pipen);/读取失败,打印错误信息/else printf(:%sn,s);/打印读取到的信息数据/exit(0);/主进程退出/2、命名管道设计。命名管道的通信例子中包括 client 端和 server 端。它们源代码文件名称分别为 fifo_clt.c和 fifo_svr.c,还有一个公共常量的有关文件被打包在文件 fifo_hd.h 运行时,client 只运行一次就将退出,而 server 端作为服务器仍将继续运行,你再次启动 client 来请求服务。FIFO 的用
24、法 1、创建 用 mkfifo 或 mknod 创建一个命名管道。以 mkfifo 为例:#include#include int mkfifo(const char*fifo_name,mode_t mode);/成功返回 0,否则为-1 2、使用 管 道 一 经 创 建,就 可 向 普 通 文 件 一 样 使 用。可 通 过 系 统 调 用open,close,read,write,unlink 等进行操作。管道打开过程中,变量 O_NONBLOCK将影响打开后对文件的操作。默认情况下该变量不设置,也就是以阻塞方式打开。这样可以保证原子性操作。(因此可以不考虑该参数。)在操作过程中,如果对
25、一个管道进行写操作 write,若对方没有以读方式打开将产生SIGPIPE。你可以捕获此信号进行处理。默认情况下是出现写错误。当最后一个写入者关闭了管道,将产生一个文件结束标志 EOF。3、client、server 可以以 client/server 方式使用 FIFO。如果一个服务器有多个客户时,每个客户可通过一个 well_known FIFO 服务器连接。连接后可以通过 well_known FIFO 向服务器发送请求,所发信息的长度必须 PIPE_BUF(4096)。如果客户服务器模式是并发型的话,则客户机不能再通过 well_known FIFO 回读信息。此时可采用在已连接的客户
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 管道 通信 电子 数据通信 网络
限制150内