管道是Linux中进程间通信的一种方式,他把一个程序的输出直接连接到另一个程序的输入。
linux管道主要包括无名管道和有名管道两种。
一、无名管道(pipe)
特点:
(1)只能用于具有亲缘关系的进程之间的通信(也就是父子进程或者兄弟进程之间)。
(2)是一个单工的通信模式,具有固定的读端和写端。
(3)管道也可以看成一种特殊的文件,对于它的读写也可以使用普通的read0)、 write ()等函数。但是它不属于任何文件系。
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <string.h>
int main()
{
//定义一个包含来两个元素的整形数组
int fd[2] = {0};
//创建无名管道
if(pipe(fd) < 0)
{
perror("pipe error!\n");
return -1;
}
//创建子进程
pid_t pid;
pid = fork();
if(pid < 0)
{
perror("fore error!\n");
return -1;
}
else if(pid == 0)
{
close(fd[0]); //关闭读端
char buf[20] = {'\0'};
while(1)
{
fgets(buf,sizeof(buf),stdin); //将数据从键盘输入
write(fd[1],buf,strlen(buf)); //将数据写入管道
}
}
else if(pid > 0)
{
close(