//创建管道函数
#include<myhead.h>
int main(int argc, const char *argv[])
{
//创建两个管道文件
if(mkfifo("./myfifo1",0664)==-1)
{
perror("mkdir error");
return -1;
}
if(mkfifo("./myfifo2",0664)==-1)
{
perror("mkdir error");
return -1;
}
//阻塞
getchar();
system("rm myfifo1");
system("rm myfifo2");
return 0;
}
//第一个收发函数
#include<myhead.h>
int main(int argc, const char *argv[])
{
pid_t pid=fork();
//父进程
if(pid>0)
{
//打开管道文件1
int wfd=-1;
if((wfd=open("./myfifo1",O_WRONLY))==-1)
{
perror("open error");
return -1;
}
char wbuf[128]="";
while(1)
{
printf("请输入>>>");
fgets(wbuf,sizeof(wbuf),stdin);
wbuf[strlen(wbuf)-1]=0;
//将数据写入管道1
write(wfd,wbuf,strlen(wbuf));
//判断结果
if(strcmp(wbuf,"quit")==0)
{
break;
}
}
close(wfd);
wait(NULL);//阻塞回收子进程
}
else if(pid==0)
{
//以只读打开管道文件2
int rfd2=-1;
if((rfd2=open("./myfifo2",O_RDONLY))==-1)
{
perror("open error");
return -1;
}
//定义容器
char rbuf2[128]="";
while(1)
{
//清空数组
bzero(rbuf2,sizeof(rbuf2));
//读取管道中的数据
read(rfd2,rbuf2,sizeof(rbuf2));
//输出结果
printf("\n收到的数据为:%s\n",rbuf2);
//判断结果
if(strcmp(rbuf2,"quit")==0)
{
break;
}
}
close(rfd2);
exit(EXIT_SUCCESS);
}
else
{
perror("fork error");
return -1;
}
return 0;
}
//第二个收发函数
#include<myhead.h>
int main(int argc, const char *argv[])
{
pid_t pid=fork();
if(pid>0)
{ //以只读打开管道文件1
int rfd=-1;
if((rfd=open("./myfifo1",O_RDONLY))==-1)
{
perror("open error");
return -1;
}
//定义容器
char rbuf[128]="";
while(1)
{
//清空数组
bzero(rbuf,sizeof(rbuf));
//读取管道中的数据
read(rfd,rbuf,sizeof(rbuf));
//输出结果
printf("\n收到的数据为:%s\n",rbuf);
//判断结果
if(strcmp(rbuf,"quit")==0)
{
break;
}
}
close(rfd);
wait(NULL);//阻塞回收子进程
}
else if(pid==0)
{
//打开管道文件2
int wfd2=-1;
if((wfd2=open("./myfifo2",O_WRONLY))==-1)
{
perror("open error");
return -1;
}
char wbuf2[128]="";
while(1)
{
printf("请输入>>>");
fgets(wbuf2,sizeof(wbuf2),stdin);
wbuf2[strlen(wbuf2)-1]=0;
//将数据写入管道1
write(wfd2,wbuf2,strlen(wbuf2));
//判断结果
if(strcmp(wbuf2,"quit")==0)
{
break;
}
}
close(wfd2);
exit(EXIT_SUCCESS);
}
else
{
perror("fork error");
return -1;
}
return 0;
}