创建两个有名管道,分别用来读和写,用四个进程来完成。
//a用来读取信息,b用来写入信息的管道
#include "stdio.h"
#include "stdlib.h"
int main()
{
int ret;
ret = mkfifo("./arfifo",0777);
if(-1 == ret)
{
printf("mkfifo error\n");
exit(-1);
}
return 0;
}
//a用来写入信息,b用来读取信息的管道
#include "stdio.h"
#include "stdlib.h"
int main()
{
int ret;
ret = mkfifo("./awfifo",0777);
if(-1 == ret)
{
printf("mkfifo error\n");
exit(-1);
}
return 0;
}
//a的程序
#include <stdio.h>
#include <fcntl.h>
#include <stdlib.h>
#include <string.h>
int main()
{
int pid;
int awfd;
int arfd;
char arbuf[128] = {0};
char awbuf[128] = {0};
pid = fork();
if(pid > 0)
{
awfd = open("./awfifo",O_WRONLY);
if(awfd == -1)
{
printf("open error\n");
exit(-1);
}
while(1)
{
scanf("%s",awbuf);
write(awfd,awbuf,strlen(awbuf));
if(strcmp(awbuf,"quit") == 0)
{
break;
}
memset(awbuf,0,128);
}
close(awfd);
}
if(pid == 0)
{
arfd = open("./arfifo",O_RDONLY);
if(arfd == -1)
{
printf("open error\n");
exit(-1);
}
while(1)
{
read(arfd,arbuf,128);
if(strcmp(arbuf,"quit") == 0)
{
break;
}
fprintf(stdout,"%s\n",arbuf);
memset(arbuf,0,128);
}
close(arfd);
}
return 0;
}
//b的程序
#include <stdio.h>
#include <fcntl.h>
#include <stdlib.h>
#include <string.h>
int main()
{
int pid;
int awfd;
int arfd;
char arbuf[128] = {0};
char awbuf[128] = {0};
pid = fork();
if(pid > 0)
{
awfd = open("./awfifo",O_RDONLY);
if(awfd == -1)
{
printf("open error\n");
exit(-1);
}
while(1)
{
read(awfd,awbuf,128);
if(strcmp(awbuf,"quit") == 0)
{
break;
}
fprintf(stdout,"%s\n",awbuf);
memset(awbuf,0,128);
}
close(awfd);
}
if(pid == 0)
{
arfd = open("./arfifo",O_WRONLY);
if(arfd == -1)
{
printf("open error\n");
exit(-1);
}
while(1)
{
scanf("%s",arbuf);
write(arfd,arbuf,strlen(arbuf));
if(strcmp(arbuf,"quit") == 0)
{
break;
}
memset(arbuf,0,128);
}
close(arfd);
}
return 0;
}