目录
一、创建无名管道
#include <unistd.h>
int pipe(int pipefd[2]);
//参数 --- 管道两端的文件描述符
//返回值 ----成功:0,失败:-1
二、无名管道通信特点
1》读端和写端固定
2》工作模式:单工
3》通信的进程之间必须有亲缘关系
三、如何通信
int main(void)
{
int fd[2];
pid_t pid;
char buf[100];
//创建无名管道
if(pipe(fd) < 0){
perror("pipe");
exit(1);
}
//创建子进程
if((pid = fork()) < 0){
perror("fork");
exit(1);
}else if(!pid){ //子进程
close(fd[0]); //关闭管道的读端
while(1){
bzero(buf,sizeof(buf));
printf("请输入字符串:");
fgets(buf,sizeof(buf),stdin);
if(write(fd[1],buf,strlen(buf)) < 0){
perror("write");
exit(1);
}
}
exit(0);
}else{ //父进程
close(fd[1]); //关闭管道写端
int ret;
while(1){
bzero(buf,sizeof(buf));
if((ret = read(fd[0],buf,sizeof(buf))) < 0){
perror("read");
exit(1);
}else if(ret == 0){
printf("####\n");
exit(1);
}
printf("recv:%s",buf);
}
exit(0);
}
}