管道设计要求:(1)半双工(数据只能在一个方向上流动)
(2)只能在具有公共祖先的两个进程之间使用
管道实质:实质是内核缓冲区(4kb),内核使用环形队列机制
函数原型:int pipe(int pipefd[2]); //创建管道
其中,fd返回两个文件描述符:fd[0]为读而打开,fd[1]为写而打开,对于两个进程的通信,在读/写入管道时,一个进程需要使用一个fd并关闭另一个fd(确保数据单方向流动)
#include<unistd.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(void)
{
int fd[2];
int n;
pid_t pid;
char buf[100];
if(pipe(fd)<0) //创建管道
perror("pipe error");
pid=fork(); //创建子进程
if(pid<0) perror("pipe error");
else if(pid>0) { //父进程
close(fd[0]); //关闭读
write(fd[1],"hello world\n",strlen("hello world\n")); //将内容写入管道中