进程的管道通信实验说明书.doc_第1页
进程的管道通信实验说明书.doc_第2页
进程的管道通信实验说明书.doc_第3页
进程的管道通信实验说明书.doc_第4页
进程的管道通信实验说明书.doc_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

*实践教学* 兰州理工大学计算机与通信学院2011年秋季学期操作系统原理课程设计题 目: 进程的管道通信实验专业班级: 09计算机(5)班姓 名: 董跃永 学 号: 09240521 指导教师: 年福忠 成 绩: _目 录摘 要3正 文4一问题描述4二. 设计目的4三. 设计要求5四. 详细设计51程序流程图62算法设计7五. 结果分析9设计总结10参考文献11致 谢12附件 源程序代码13摘 要管道通信是发送进程和接收进程之间通过一个通道交流信息,管道是单向的,发送进程视管道为输出文件,即向管道写入数据,接收进程视管道为输入文件,即从中读取数据。先写入的必定先读出,即管道通信的工作是单向的并以先进先出为顺序。管道通信的实质是一个共享文件,数据以自然字符流的方式写入和读出。在Linux系统中,进程在执行系统调用pipe()之后便创建了一个无名管道。在管道通信实验中,可用父进程创建一个无名管道,子进程向其中写入信息,父进程从其中读取信息并显示。关键词:父进程,子进程,管道,通信,文件正 文一问题描述:(1).了解UNIX的命令及使用格式,熟悉UNIX/LINUX的常用基本命令,练习并掌握UNIX提供的vi编辑器来编译C程序,学会利用gcc、gdb编译、调试C程序。(2).编写程序实现进程的管道通信。用系统调用pipe( )建立一管道,二个子进程P1和P2分别向管道各写一句话: Child 1 is sending a message! Child 2 is sending a message!父进程从管道中读出二个来自子进程的信息并显示(要求先接收P1,后P2)。二.设计目的:通过该题目的设计过程,熟悉UNIX/LINUX支持的管道通信方式,了解该系统下进程管道通信机制,掌握进程管道通信程常用的系统函数,能够编写代码实现父子进程的管道通信。练习并掌握UNIX/LINUX提供的vi编辑器来编译C程序,学会利用gcc、gdb编译、调试C程序。三.设计要求:编写程序实现进程的管道通信。用系统调用pipe( )建立一管道,二个子进程P1和P2分别向管道各写一句话: Child 1 is sending a message! Child 2 is sending a message!父进程从管道中读出二个来自子进程的信息并显示(要求先接收P1,后P2)。四. 详细设计: 1程序流程图函数的调用关系图:2算法设计各模块的伪码算法该函数使用头文件如下:#include #include #include #include 1. pipe() 函数调用格式:int fd2;pipe(fd)功能: 建匿名管道,fd0为读端,fd1为写端。2fork() 函数调用格式:pid_t pid1,pid2;pid1=fork();pid2=fork();功能:fork()函数创建子进程。注:此函数被调用一次但返回两次,子进程中返回0值,而父进程中返回子进程ID;调用fork()函数,父、子进程的执行次序不确定。3.sprintf() 函数调用格式:char outpipe50;char string = “hello”; sprintf(outpipe,string);功能: 把字符串string的内容写入到字符数组outpipe中。 4.write() 函数调用格式:write(fd1,outpipe,nbyte);功能: 把nbyte 个字节的数据,从outpipe所指向的缓冲区写到由fd所指向的系统文件中。写入内容时,关闭读取端,锁定写入端,写入完成,解除锁定。5.read() 函数调用格式:read(fd0,inpipe,nbyte);功能: 从fd0端读取nbyte个字节的数据,并把数据写入到inpipe中。6.lockf() 函数调用格式:lockf(fd1,1,0);功能: 锁定管道写端,保证写入数据的完整性。lockf(fd1,0,0);功能: 解锁管道写端。7.wait() 函数调用格式:wait(NULL);功能: 在用fork()创建一个子进程的时候,若先进入父进程,则使其等待,直到子进程把信息写入管道,再执行父进程。8.sleep() 函数调用格式:sleep(num);功能: 使进程休眠num秒。9.exit() 函数调用格式: exit(0);功能: 子进程执行写入数据操作完成,退出,并向系统返回0值。五. 结果分析最终所得结果如下图所示:设计总结通过这次课程设计,我对操作系统的进程管道通信有了进一步的了解,同时熟悉了在linux环境下c语言的编译和调试,以及linux系统有关进程管道通信的函数。更为重要的是,将所学的课本理论知识运用到实践当中,实现了理论与实践相结合,提高了解决实际问题的能力。从开始借阅书籍,上网查找相关资料,到设计程序,短短两周很快就过去了。在这次课程设计的过程中,我遇到了很多困难,通过自己的不断努力,同学的帮助,和老师的细心指导,进程的管道通信实验基本完成。其功能基本符合课程设计任务的要求。在此次实践设计中我遇到了很多困难,这说明对理论知识还需要深入地理解。动手实践编写程序,调试程序则是更为重要的。所以在平时学习课本知识的同时,需要亲自实践编写代码实现理论的知识,提高自己的实际动手能力,并加深对理论知识的理解。最后,通过该题目的设计过程,我熟悉Linux操作系统、gcc、vim编辑器、makefile、gdb以及linux下进程的管道通信,进一步理解了操作系统中进程管道通信的原理,并学会如何在linux操作系统中实现进程的管道通信。参考文献1. 汤子瀛,哲凤屏.计算机操作系统.西安电子科技大学学出版社.2. 王清,李光明.计算机操作系统.冶金工业出版社.3. 孙钟秀等.操作系统教程. 高等教育出版社4. 曾明.Linux操作系统应用教程. 陕西科学技术出版社. 5. 张丽芬,刘利雄.操作系统实验教程. 清华大学出版社.6. 孟静.操作系统教程原理和实例分析. 高等教育出版社7. 周长林.计算机操作系统教程. 高等教育出版社8. 张尧学.计算机操作系统教程.清华大学出版社9. 任满杰.操作系统原理实用教程.电子工业出版社致 谢这次课程设计使我学到了很多实用知识,真正做到了理论与实践相结合,得到了操作系统方面的综合训练,提高了解决实际问题的能力。这次课程设计也使我明白了,学习知识不仅仅是停留在书本上那么简单,编写代码,调试程序,更是一种有效地学习知识的方法。只有理论与实践相结合才在以后的学习与工作中走的更高走的更远。在此,感谢年福忠老师孜孜不倦的指导同学无私的帮助。附录:源程序代码 #include #include #include #include int main()pid_t pid1,pid2;int fd2;char outpipe50,inpipe50;if(pipe(fd)0)/* 创建匿名管道,fd0为读端,fd1为写端 */printf(Pipe create error!n);exit(-1);/* This is the child process 1 */* fork函数被调用一次但返回两次,子进程中返回0值,而父进程中返回子进程ID;*/* 但调用fork()父子进程的执行次序不确定.*/* 如果创建子进程失败,则退出 */if(pid1=fork() = -1)/* 创建子进程1 */printf(Error in fork().n);exit(-1);/* 执行子进程1,向管道写入信息 */if(pid1=0)lockf(fd1,1,0); /* 锁定管道写端,保证写入数据的完整性 */sprintf(outpipe,child 1 is sending a message!);write(fd1,outpipe,35); /* 子进程向管道中写入信息 */lockf(fd1,0,0); /* 解锁管道写端 */exit(0); /* 子进程1退出 */else /* 若先进入父进程,则使其等待,直到子进程1 把信息写入管道 */* 即:先让子进程1 把信息写入管道,后让子进程2 把信息写入管道 */wait(NULL);/* This is the child process 2 */* 如果创建子进程失败,则退出 */if(pid2=fork() = -1)printf(Error in fork().n);exit(-1);/* 执行子进程2 */if(pid2=0)lockf(fd1,1,0); /* 锁定管道写端,保证写入数据的完整性 */sprintf(outpipe,Child 2 is sending a message!);write(fd1,outpipe,34);lockf(fd1,0,0);/* 解锁管道写端 */exit(0);/* 子进程2退出 */elsewait(0);/* 若先执行父进程,则

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论