作业要求:
![](https://img-blog.csdnimg.cn/direct/ca9bbd57e54042b6a1dde765a1653e4c.png)
主进程一函数:
#include <myhead.h>
int main(int argc, const char *argv[])
{
//创建管道文件
if(mkfifo("./mf1",0664)!=0){
perror("mkfifo error");
return -1;
}
printf("管道创建成功\n");
int fd1,fd2;
//定义进程号
pid_t pid1=-1;
//创建子进程
pid1=fork();
//打开管道文件
if((fd1=open("./mf1",O_WRONLY))==-1){
perror("open error");
return -1;
}
if((fd2=open("./mf2",O_RDONLY))==-1){
perror("open error");
return -1;
}
if(pid1>0){
char buf[128]="";
//向管道文件中写入
while(1){
bzero(buf,sizeof(buf));
printf("\n请输入:");
fgets(buf,sizeof(buf),stdin);
buf[strlen(buf)-1]=0;
if(strcmp("quit",buf)==0)
break;
write(fd1,buf,strlen(buf));
}
}else if(pid1==0){
usleep(1);
char buf[128]="";
//读取管道文件的内容
while(1){
bzero(buf,sizeof(buf));
read(fd2,buf,sizeof(buf));
if(strcmp("quit",buf)==0)
break;
printf("接到的数据:%s\n",buf);
}
}else{
perror("fork error");
return -1;
}
close(fd1);
close(fd2);
return 0;
}
![](https://img-blog.csdnimg.cn/f0b9f3d3d62a4d51878fa2a428d13698.png)
主进程二函数
#include <myhead.h>
int main(int argc, const char *argv[])
{
//创建管道文件
if(mkfifo("./mf2",0664)!=0){
perror("mkfifo error");
return -1;
}
printf("管道创建成功\n");
int fd1,fd2;
//定义进程号
pid_t pid2=-1;
//创建子进程
//打开管道文件
pid2=fork();
if((fd1=open("./mf1",O_RDONLY))==-1){
perror("open error");
return -1;
}
if((fd2=open("./mf2",O_WRONLY))==-1){
perror("open error");
return -1;
}
if(pid2>0){
char buf[128]="";
//向管道文件中写入
while(1){
bzero(buf,sizeof(buf));
printf("\n请输入:");
fgets(buf,sizeof(buf),stdin);
buf[strlen(buf)-1]=0;
if(strcmp("quit",buf)==0)
break;
write(fd2,buf,strlen(buf));
}
}else if(pid2==0){
char buf[128]="";
//读取管道文件的内容
while(1){
bzero(buf,sizeof(buf));
read(fd1,buf,sizeof(buf));
if(strcmp("quit",buf)==0)
break;
printf("接到的数据:%s\n",buf);
}
}else{
perror("fork error");
return -1;
}
close(fd1);
close(fd2);
return 0;
}
![](https://img-blog.csdnimg.cn/05617fdd11244a8389b573e619232f85.png)
代码效果图:
![](https://img-blog.csdnimg.cn/direct/ef87e156e3a14f0db19ae01f229b532b.png)