ImageVerifierCode 换一换
格式:DOCX , 页数:9 ,大小:110.42KB ,
资源ID:14320010      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/14320010.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(进程的管道通信实验说明书Word文档下载推荐.docx)为本站会员(b****2)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

进程的管道通信实验说明书Word文档下载推荐.docx

1、 _致 12摘 要管道通信是发送进程和接收进程之间通过一个通道交流信息,管道是单向的,发送进程视管道为输出文件,即向管道写入数据,接收进程视管道为输入文件,即从中读取数据。先写入的必定先读出,即管道通信的工作是单向的并以先进先出为顺序。管道通信的实质是一个共享文件,数据以自然字符流的方式写入和读出。在Linux系统中,进程在执行系统调用pipe()之后便创建了一个无名管道。在管道通信实验中,可用父进程创建一个无名管道,子进程向其中写入信息,父进程从其中读取信息并显示。关键词:父进程,子进程,管道,通信,文件正 文一问题描述:(1).了解UNIX的命令及使用格式,熟悉UNIX/LINUX的常用基

2、本命令,练习并掌握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

3、/LINUX提供的vi编辑器来编译C程序,学会利用gcc、gdb编译、调试C程序。三.设计要求:编写程序实现进程的管道通信。用系统调用pipe( )建立一管道,二个子进程P1和P2分别向管道各写一句话:四. 详细设计: 1程序流程图函数的调用关系图:2算法设计各模块的伪码算法该函数使用头文件如下:#include unistd.hstdio.hstdlib.h1. pipe() 函数调用格式:int fd2;pipe(fd)功能: 建匿名管道,fd0为读端,fd1为写端。2fork() 函数pid_t pid1,pid2;pid1=fork();pid2=fork();fork()函数创建子进

4、程。注:此函数被调用一次但返回两次,子进程中返回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,

5、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值。五. 结果分析最终所得结果如下图所示:设计总结通过

6、这次课程设计,我对操作系统的进程管道通信有了进一步的了解,同时熟悉了在linux环境下c语言的编译和调试,以及linux系统有关进程管道通信的函数。更为重要的是,将所学的课本理论知识运用到实践当中,实现了理论与实践相结合,提高了解决实际问题的能力。从开始借阅书籍,上网查找相关资料,到设计程序,短短两周很快就过去了。在这次课程设计的过程中,我遇到了很多困难,通过自己的不断努力,同学的帮助,和老师的细心指导,进程的管道通信实验基本完成。其功能基本符合课程设计任务的要求。在此次实践设计中我遇到了很多困难,这说明对理论知识还需要深入地理解。动手实践编写程序,调试程序则是更为重要的。所以在平时学习课本知

7、识的同时,需要亲自实践编写代码实现理论的知识,提高自己的实际动手能力,并加深对理论知识的理解。最后,通过该题目的设计过程,我熟悉Linux操作系统、gcc、vim编辑器、makefile、gdb以及linux下进程的管道通信,进一步理解了操作系统中进程管道通信的原理,并学会如何在linux操作系统中实现进程的管道通信。参考文献1. 汤子瀛,哲凤屏.计算机操作系统.电子科技大学学.2. 王清,光明.计算机操作系统.冶金工业.3. 钟秀等.操作系统教程. 高等教育4. 曾明.Linux操作系统应用教程. 科学技术. 5. 丽芬,利雄.操作系统实验教程. 清华大学.6. 孟静.操作系统教程原理和实例

8、分析. 高等教育7. 周长林.计算机操作系统教程. 高等教育8. 尧学.计算机操作系统教程.清华大学9. 任满杰.操作系统原理实用教程.电子工业致 这次课程设计使我学到了很多实用知识,真正做到了理论与实践相结合,得到了操作系统方面的综合训练,提高了解决实际问题的能力。这次课程设计也使我明白了,学习知识不仅仅是停留在书本上那么简单,编写代码,调试程序,更是一种有效地学习知识的方法。只有理论与实践相结合才在以后的学习与工作中走的更高走的更远。在此,感年福忠老师孜孜不倦的指导同学无私的帮助。附录:源程序代码 int main() pid_t pid1,pid2; int fd2; char outp

9、ipe50,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 */Error in fork().n /* 执行子进程1,向管道写入信息 */ if(pi

10、d1=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 proce

11、ss 2 */ /* 如果创建子进程失败,则退出 */ if(pid2=fork() = -1) printf( 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退出 */ else wait(0); /* 若先执行父进程,则等待,直到子进程2 写入信息*/ sleep(1); /* 休眠1秒 */ read(fd0,inpipe,35); /* 从管道中读取信息,此信息由子进程1写入 */%sn,inpipe); /* 打印输出信息*/ /* 从管道中读取信息,此信息由子进程2写入 */ return 0;

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1