进程A
#include<stdio.h>
#include<unistd.h>
#include<string.h>
#include<sys/stat.h>
#include<errno.h>
#include<sys/types.h>
#include<fcntl.h>
int main(int argc, const char *argv[])
{
umask(0);
if(mkfifo("./01fifo",0777)<0)
{
if(errno!=17)
{
perror("mkfifo");
return -1;
}
}
if(mkfifo("./02fifo",0777)<0)
{
if(errno!=17)
{
perror("mkfifo");
return -1;
}
}
printf("mkfifo success\n");
int fd1=open("./01fifo",O_WRONLY);
if(fd1<0){perror("open01");}
int fd2=open("./02fifo",O_RDONLY);
if(fd2<0){perror("open02");}
printf("open success\n");
char wo[128]={0};
bzero(wo,sizeof(wo));
char ro[128]={0};
bzero(ro,sizeof(ro));
while(1)
{
printf("进程A先输入>>>>");
fgets(wo,sizeof(wo),stdin);
wo[strlen(wo)-1]='\0';
write(fd1,wo,sizeof(wo));
int res=read(fd2,ro,sizeof(ro));
if(strcasecmp(wo,"quit")==0||strcasecmp(ro,"quit")==0)break;
printf("进程A>>%s\n",ro);
}
close(fd1);
close(fd2);
return 0;
}
进程B
#include<stdio.h>
#include<unistd.h>
#include<string.h>
#include<errno.h>
#include<sys/stat.h>
#include<sys/types.h>
#include<fcntl.h>
int main(int argc, const char *argv[])
{
umask(0);
if(mkfifo("./01fifo",0777)<0)
{
if(errno!=17)
{
perror("mkfifo");
return -1;
}
}
if(mkfifo("./02fifo",0777)<0)
{
if(errno!=17)
{
perror("mkfifo");
return -1;
}
}
printf("mkfifo success\n");
int fd1=open("./01fifo",O_RDONLY);
if(fd1<0){perror("open01");}
int fd2=open("./02fifo",O_WRONLY);
if(fd2<0){perror("open02");}
printf("open success\n");
char ro[128]={0};
bzero(ro,sizeof(ro));
char wo[128]={0};
bzero(wo,sizeof(wo));
while(1)
{
int res=read(fd1,ro,sizeof(ro));
printf("进程B>>>%s\n",ro);
printf("进程B输入>>>>");
fgets(wo,sizeof(wo),stdin);
wo[strlen(wo)-1]='\0';
write(fd2,wo,sizeof(wo));
if(strcasecmp(wo,"quit")==0)break;
}
close(fd1);
close(fd2);
return 0;
}
result