Linux学习之实验篇共 7篇
实验六、七 进程间通信:管道
一、 实验目的
1.了解 UNIX 管道的相关函数。
2.了解UNIX 管道的建立与使用。
3.能编写简单管道程序。
二、 实验预备知识
1.什么是管道
我们把从一个进程连接到另一个进程的一个数据流称为一个“管道”。我们通常是把一个进程的输出连接或“管接”(经过管道来连接)到另一个进程的输入。
2.进程管道
(1)popen函数
popen函数允许一个程序把另外一个程序当做一个新的进程来启动,并能对它发送数据或者接收数据。
格式:#include<stdio.h>
FILE *popen(command”,”open_mode”其中,command参数是待操作的命令 open_mode参数的值有r和w两种:
r为读操作,表示是读入command参数提供的命令执行结果后,输出。 w为写操作,表示是向command参数提供的命令进行写操作,即为其提供输入信息,然后将这个命令的执行结果输出。有向命令提供输入信息时,使用的是fwrite函数,其格式:fwrite(信息源,信息源类型长度,信息源的长度,写入对象)。如:想把buffer这个已定义的数组变量中的信息写入popen函数,作为popen函数中command参数提供的命令的输入信息,且buffer为字符型数组,则可表示为:首先,将popen函数的结果赋给一个变量write_fp: write_fp=popen(“od –c”, “w”);
然后,用fwrite函数指定popen的写操作的信息来源:
fwrite(buffer, sizeof(char) , strlen(buffer),write_fp);
(2)pclose函数
格式:#include<stdio.h>
int pclose(文件指针)
功能:当用popen启动的命令完成了操作的时候,我们可用pclose关闭与之关联的文件流。Pclose调用只有在popen启动的进程结束之后才能返回。如果在调用pclose的时候它仍在运行,pclose将等待该进程的结束。 如:上例中已将od –c命令运行。现要结束该命令,则用: pclose(write_fp);
(3)pipe函数
通过它在两个程序之间传递数据时不需要启动一个shell来解释给定的命令,降低了程序的运行成本;我们对数据读、写操作的控制也加强了。 格式:#include<unistd.h>
int pipe(int file_descriptor[2]);