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

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

河南城建学院

《操作系统》课程设计说明书

设计题目:管道通信

专业:计算机科学与技术

指导教师:邵国金蔡照鹏杜小杰

班级:0814121

学号:081412155

姓名:朱瑞光

同组人:刘品申星星

计算机科学与工程学院

2015 年1 月08 日

一、前言

课程设计是检测学生课程效果的重要手段,是训练学生通过所学的知识解决实际问题的重要方式,同时也是实践性教学中的一个重要环节,它以某以课程为基础,可以涉及和课程相关的各个方面,是一门独立于课程之外的特殊课程。课程设计是让学生对所学的课程更全面的学习和应用,理解和掌握课程的相关知识。《操作系统》是一门重要的专业课,是计算机理论和应用的核心。

操作系统课程设计,是一次对多学知识的综合演练,要求学生在操作系统的设计理念、整体机构、模块划分、数据结构的选择和应用、算法的设计及其实现等方面,加深对课程基本内容的理解,同时,在课程设计方法以及上机操作等基本技能和科学作风方面收到比较系统和严格的训练。

在这次的课程设计中我们选择的题目是进程间通信消息机制的设计,实现消息的创建、发送和接收及在server端创建一个服务函数,从而形成C/S 通讯模式。消息机制是消息通过消息队列的方式进行进程间消息的传递,通过此次课程设计,全面理解消息机制进程间通信方法。实现把死板的课本知识变得生动有趣,激发了学生的积极性。把学过的计算机操作系统的知识强化,能够把课堂上的知识通过自己设计的程序表示出来。

1

二、目录

一、前言 (1)

二、目录 (2)

三、设计目的与要求 (3)

1、目的 (3)

2、要求 (3)

四、运行环境 (4)

1硬件环境: (4)

2软件环境: (4)

五、总体设计 (5)

1、fork() (5)

2、lockf() (5)

3、read() (5)

4、write() (6)

5、signal(sig,function) (6)

6、open() (6)

7、getpid() (7)

8、Sleep() (7)

9、Exit() (7)

10、Wait() (8)

11.Unlink() (8)

六、详细设计 (11)

1、匿名管道 (11)

2、服务器程序 (13)

3、客户端程序 (15)

七、调试与测试 (17)

八、设计中遇到的问题及解决方法 (21)

九、源程序代码 (22)

1、管道通信 (22)

2、客户端程序 (25)

十、参考文献 (27)

十一、心得体会 (28)

2

三、设计目的与要求

1、目的

学习计算机软件技术,特别是计算机操作系统技术,除了需要刻苦努力外,还需要掌握软件和操作系统的原理与设计技巧。如何学习和掌握操作系统技术的原理与实际技巧呢?除了听课和读书之外,最好的方法就是在实践中练习。例如,自己设计一个小型系统,多使用操作系统,多阅读和分析操作源代码等。但由于我们的条件和学时有限,在理论学习过程中没有给同学们提供更多的实验机会。本操作系统课程设计,是给同学提供一个集中实验的机会。希望同学们通过该设计加深对所学习课程的理解。

2、要求

利用UNIX系统提供的管道机制实现进程间的通信。

(1)管道通信。利用pipe()和lockf()系统调用,编写程序,实现同族进程间的通信。使用系统调用pipe()建立一条管道线;创建子进程P1、P2、…。子进程Pi分别向管道各写信息,而父进程则从管道中读出来自于各子进程的信息,实现进程家族间无名管道通讯。

扩展之,使之成为客户/服务器模式,并完成一定的任务(自己定义)。

(2)命名管道通信:利用mkfifo(name,mode)或mknod(name,mode,0)创建一个命名管道,然后利用它和文件部分系统调用实现不同进程间的通信。改造之,使之成为客户/服务器模式,并完成一定的任务(自己定义)。

3

四、运行环境

1硬件环境:

Cpu频率要满足使用需求

内存大于2G

2软件环境:

Windows xp/7/8操作系统

装有VMware虚拟机并可正常运行的PC

VMware中安装有Linux/Unix系列的操作系统,如fedora,Red Hat等。

4

五、总体设计

1、fork()

创建一个新进程。

用法:int fork()

其中返回int取值意义如下:

0:创建子进程,从子进程返回的id值

>0:从父进程返回的子进程id值

-1:创建失败

2、lockf()

用作锁定文件的某些段或者整个文件。

头文件:

#include

参数定义:

int lockf(files,function,size);

int files,function;

long size;

其中:files是文件描述符;function是锁定和解锁;1表示锁定;0表示解锁;Size是锁定或解锁的字节数,若用0,表示从文件的当前位置到文件尾。

3、read()

功能:从描述符为filedes的文件读信息。

用法:

#include

ssize_t read(int filedes, void *buff, size_t nbytes) ;

返回:读到的字节数,若已到文件尾为0,若出错为-1。

在UNIX/Linux 可重定义为:

int read(int fd, char *buff, unsigned nbytes) ;

5

相关文档
最新文档