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

上传人:b****2 文档编号:14320010 上传时间:2022-10-22 格式:DOCX 页数:9 大小:110.42KB
下载 相关 举报
进程的管道通信实验说明书Word文档下载推荐.docx_第1页
第1页 / 共9页
进程的管道通信实验说明书Word文档下载推荐.docx_第2页
第2页 / 共9页
进程的管道通信实验说明书Word文档下载推荐.docx_第3页
第3页 / 共9页
进程的管道通信实验说明书Word文档下载推荐.docx_第4页
第4页 / 共9页
进程的管道通信实验说明书Word文档下载推荐.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

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

《进程的管道通信实验说明书Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《进程的管道通信实验说明书Word文档下载推荐.docx(9页珍藏版)》请在冰豆网上搜索。

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

_______________

致12

摘要

管道通信是发送进程和接收进程之间通过一个通道交流信息,管道是单向的,发送进程视管道为输出文件,即向管道写入数据,接收进程视管道为输入文件,即从中读取数据。

先写入的必定先读出,即管道通信的工作是单向的并以先进先出为顺序。

管道通信的实质是一个共享文件,数据以自然字符流的方式写入和读出。

在Linux系统中,进程在执行系统调用pipe()之后便创建了一个无名管道。

在管道通信实验中,可用父进程创建一个无名管道,子进程向其中写入信息,父进程从其中读取信息并显示。

关键词:

父进程,子进程,管道,通信,文件

正文

一.问题描述:

(1).了解UNIX的命令及使用格式,熟悉UNIX/LINUX的常用基本命令,练习并掌握UNIX提供的vi编辑器来编译C程序,学会利用gcc、gdb编译、调试C程序。

(2).编写程序实现进程的管道通信。

用系统调用pipe()建立一管道,二个子进程P1和P2分别向管道各写一句话:

Child1issendingamessage!

Child2issendingamessage!

父进程从管道中读出二个来自子进程的信息并显示(要求先接收P1,后P2)。

二.设计目的:

通过该题目的设计过程,熟悉UNIX/LINUX支持的管道通信方式,了解该系统下进程管道通信机制,掌握进程管道通信程常用的系统函数,能够编写代码实现父子进程的管道通信。

练习并掌握UNIX/LINUX提供的vi编辑器来编译C程序,学会利用gcc、gdb编译、调试C程序。

三.设计要求:

编写程序实现进程的管道通信。

用系统调用pipe()建立一管道,二个子进程P1和P2分别向管道各写一句话:

四.详细设计:

1.程序流程图

函数的调用关系图:

2.算法设计

各模块的伪码算法

该函数使用头文件如下:

#include<

sys/types.h>

unistd.h>

stdio.h>

stdlib.h>

1.pipe()函数

调用格式:

intfd[2];

pipe(fd)

功能:

建匿名管道,fd[0]为读端,fd[1]为写端。

2.fork()函数

pid_tpid1,pid2;

pid1=fork();

pid2=fork();

fork()函数创建子进程。

注:

此函数被调用一次但返回两次,子进程中返回0值,而父进程中返回子进程ID;

调用fork()函数,父、子进程的执行次序不确定。

3.sprintf()函数

charoutpipe[50];

charstring=“hello”;

sprintf(outpipe,string);

把字符串string的容写入到字符数组outpipe中。

4.write()函数

write(fd[1],outpipe,nbyte);

把nbyte个字节的数据,从outpipe所指向的缓冲区写到由fd所指向的系统文件中。

写入容时,关闭读取端,锁定写入端,写入完成,解除锁定。

5.read()函数

read(fd[0],inpipe,nbyte);

从fd[0]端读取nbyte个字节的数据,并把数据写入到inpipe中。

6.lockf()函数

lockf(fd[1],1,0);

锁定管道写端,保证写入数据的完整性。

lockf(fd[1],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.任满杰.《操作系统原理实用教程》.电子工业

这次课程设计使我学到了很多实用知识,真正做到了理论与实践相结合,得到了操作系统方面的综合训练,提高了解决实际问题的能力。

这次课程设计也使我明白了,学习知识不仅仅是停留在书本上那么简单,编写代码,调试程序,更是一种有效地学习知识的方法。

只有理论与实践相结合才在以后的学习与工作中走的更高走的更远。

在此,感年福忠老师孜孜不倦的指导同学无私的帮助。

附录Ⅰ:

源程序代码

intmain()

{

pid_tpid1,pid2;

intfd[2];

charoutpipe[50],inpipe[50];

if(pipe(fd)<

0)/*创建匿名管道,fd[0]为读端,fd[1]为写端*/

{

printf("

Pipecreateerror!

\n"

);

exit(-1);

}

/*****Thisisthechildprocess1*/

/*****fork函数被调用一次但返回两次,子进程中返回0值,而父进程中返回子进程ID;

*/

/*****但调用fork()父子进程的执行次序不确定.*/

/*如果创建子进程失败,则退出*/

if((pid1=fork())==-1)/*创建子进程1*/

Errorinfork().\n"

/*执行子进程1,向管道写入信息*/

if(pid1==0)

lockf(fd[1],1,0);

/*锁定管道写端,保证写入数据的完整性*/

sprintf(outpipe,"

child1issendingamessage!

"

write(fd[1],outpipe,35);

/*子进程向管道中写入信息*/

lockf(fd[1],0,0);

/*解锁管道写端*/

exit(0);

/*子进程1退出*/

else

/*若先进入父进程,则使其等待,直到子进程1把信息写入管道*/

/*即:

先让子进程1把信息写入管道,后让子进程2把信息写入管道*/

wait(NULL);

/*Thisisthechildprocess2*/

/*如果创建子进程失败,则退出*/

if((pid2=fork())==-1)

{

printf("

exit(-1);

}

/*执行子进程2*/

if(pid2==0)

lockf(fd[1],1,0);

sprintf(outpipe,"

Child2issendingamessage!

write(fd[1],outpipe,34);

lockf(fd[1],0,0);

/*解锁管道写端*/

exit(0);

/*子进程2退出*/

else

wait(0);

/*若先执行父进程,则等待,直到子进程2写入信息*/

sleep

(1);

/*休眠1秒*/

read(fd[0],inpipe,35);

/*从管道中读取信息,此信息由子进程1写入*/

%s\n"

inpipe);

/*打印输出信息*/

/*从管道中读取信息,此信息由子进程2写入*/

return0;

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 幼儿读物

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

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