实验4进程间通信:管道

实验4进程间通信:管道

ID:20456164

大小:62.00 KB

页数:5页

时间:2018-10-13

实验4进程间通信:管道_第1页
实验4进程间通信:管道_第2页
实验4进程间通信:管道_第3页
实验4进程间通信:管道_第4页
实验4进程间通信:管道_第5页
资源描述:

《实验4进程间通信:管道》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、实验六、七进程间通信:管道一、实验目的1.了解UNIX管道的相关函数。2.了解UNIX管道的建立与使用。3.能编写简单管道程序。二、实验预备知识1.什么是管道我们把从一个进程连接到另一个进程的一个数据流称为一个“管道”。我们通常是把一个进程的输出连接或“管接”(经过管道来连接)到另一个进程的输入。2.进程管道(1)popen函数popen函数允许一个程序把另外一个程序当做一个新的进程来启动,并能对它发送数据或者接收数据。File*popen()表示这个函数的返回值类型为文件指针。当操作不成功时,返回值为空指针格式:#includeFILE*po

2、pen(“command”,”open_mode”)其中,command参数是待操作的命令   open_mode参数的值有r和w两种:r为读操作,表示是读入command参数提供的命令执行结果后,输出。w为写操作,表示是向command参数提供的命令进行写操作,即为其提供输入信息,然后将这个命令的执行结果输出。有向命令提供输入信息时,使用的是fwrite函数,其格式:fwrite(信息源,信息源类型长度,信息源的长度,写入对象)。如:想把buffer这个已定义的数组变量中的信息写入popen函数,作为popen函数中command参数提供的命令的输入信息,且b

3、uffer为字符型数组,则可表示为:首先,将popen函数的结果赋给一个变量write_fp:write_fp=popen(“od–c”,“w”);然后,用fwrite函数指定popen的写操作的信息来源:fwrite(buffer,sizeof(char),strlen(buffer),write_fp);(2)pclose函数格式:#includeintpclose(文件指针)功能:当用popen启动的命令完成了操作的时候,我们可用pclose关闭与之关联的文件流。Pclose调用只有在popen启动的进程结束之后才能返回。如果在调用pcl

4、ose的时候它仍在运行,pclose将等待该进程的结束。如:上例中已将od–c命令运行。现要结束该命令,则用:pclose(write_fp);(3)pipe函数通过它在两个程序之间传递数据时不需要启动一个shell来解释给定的命令,降低了程序的运行成本;我们对数据读、写操作的控制也加强了。格式:#includeintpipe(intfile_descriptor[2]);功能:intfile_descriptor[2]是一个由两个整数类型的文件描述符组成的数组(的指针)。它在数组里填上两个新的文件描述符后返回0。如果操作失败,则返回-1,并

5、设置errno指示失败的原因。   那两个返回的文件描述符通过一种特殊的方式连接起来。写到file_descriptor[1](即管道描述符[1])的所有数据都可按照先进先出的顺序从file_descriptor[0](即管道描述符[0])读出来。将信息写入管道:write(管道写入端口,要写入的信息,信息长度);其返回值是写入信息的长度。将管道中信息读出:read(管道读出端口,信息读出后存放地址,信息长度); 其返回值是读出信息的长度。(4)fork函数          (此为实验七的内容)格式:pid_tfork();功能:创建一个新进程。若创建成功,会

6、返回进程号;否则返回-1。如:创建新进程  fork_result=fork();判断创建是否成功:  if(fork_result==-1){ ……  }判断是否在子进程:  if(fork_result==0){……  }  还是在父进程:  else{……  }三、实验内容1.在UNIX中编写c语言程序。2.管道函数的使用。3.管道的建立。4.通过创建新进程来实现管道。(此为实验七的内容)四、实验步骤1.用popen和pclose函数建立一个管道(1)新建一个C语言程序:a1.cod命令是一个八进制输出程序。它可把用户从键盘输入的字符串(包括控制字符:回车

7、换行)转换成单个字符后在屏幕上输出。如:od–c就是将用户输入的信息在屏幕上输出:一行16个字符。$via1.c程序目的:把数据经管道送往另一个程序   (该程序我们选用od命令)文件a1.c的内容:头文件其中,stdil.h文件提供了一个常数BUFSIZ,用于指定的缓冲区长度#include#include#include定义一个文件指针,以接收popen函数的值intmain(){定义一个数组(其实就是在内存中开辟一个缓冲区),用于存放要输出的数据FILE*write_fp;若od–c执行成功char

8、buffer[BUFSI

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。