一、要求实现AB进程对话
- A进程先发送一句话给B进程,B进程接收后打印
- B进程再回复一句话给A进程,A进程接收后打印
- 重复1.2步骤,当收到quit后,要结束AB进程
A进程
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <errno.h>
#include <unistd.h>
#include <string.h>
int main(int argc, const char *argv[])
{
if(mkfifo("./fifo_A",0664) < 0)
{
if(errno != 17)
{
perror("mkfifo");
return -1;
}
}
if(mkfifo("./fifo_B",0664) < 0)
{
if(errno != 17)
{
perror("mkfifo");
return -1;
}
}
int fd_A = open("./fifo_A",O_WRONLY);
if(fd_A < 0)
{
perror("open");
return -1;
}
int fd_B = open("./fifo_B",O_RDONLY);
if(fd_B < 0)
{
perror("open");
return -1;
}
printf("open success\n");
char buf[128] = "";
while(1)
{
scanf("%s",buf);
write(fd_A,buf,sizeof(buf));
bzero(buf,sizeof(buf));
read(fd_B,buf,sizeof(buf));
if(strcmp(buf,"quit") == 0)
{
write(fd_A,buf,sizeof(buf));
break;
}
printf("%s\n",buf);
}
close(fd_A);
close(fd_B);
return 0;
}
B进程
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <errno.h>
#include <unistd.h>
#include <string.h>
int main(int argc, const char *argv[])
{
if(mkfifo("./fifo_A",0664) < 0)
{
if(errno != 17)
{
perror("mkfifo");
return -1;
}
}
if(mkfifo("./fifo_B",0664) < 0)
{
if(errno != 17)
{
perror("mkfifo");
return -1;
}
}
int fd_A = open("./fifo_A",O_RDONLY);
if(fd_A < 0)
{
perror("open");
return -1;
}
int fd_B = open("./fifo_B",O_WRONLY);
if(fd_B < 0)
{
perror("open");
return -1;
}
printf("open success\n");
char buf[128] = "";
while(1)
{
bzero(buf,sizeof(buf));
read(fd_A,buf,sizeof(buf));
if(strcmp(buf,"quit") == 0)
{
write(fd_B,buf,sizeof(buf));
break;
}
printf("%s\n",buf);
scanf("%s",buf);
write(fd_B,buf,sizeof(buf));
}
close(fd_A);
close(fd_B);
return 0;
}