1.创建AB进程,要求如下:
a. A进程先发送一句话给B进程, B进程接收到后打印到终端上;
b.在a要求之后,B进程发送一 句话给A进程,A进程接收后打印。
c.重复a, b步骤,直到发送或者接收到quit后,结束AB进程。
///A进程
#include <errno.h>
#include <string.h>
int main(int argc, const char *argv[])
{
umask(0);
if(mkfifo("./fifo",0777)<0)
{
if(errno!=17)
{
perror("mkfifo");
return -1;
}
}
char buf[128];
while(1)
{
int fd_fifo=open("./fifo",O_RDONLY);
bzero(buf,sizeof(buf));
if(read(fd_fifo,buf,sizeof(buf))<0)
{
perror("read");
break;
}
printf("%s\n",buf);
if (strcmp(buf,"quit") == 0)
break;
close(fd_fifo);
fd_fifo=open("./fifo",O_WRONLY);
printf("please input>>>>");
fgets(buf, sizeof(buf), stdin);
buf[strlen(buf)-1]=0;
if (write(fd_fifo,buf,sizeof(buf)) == -1)
{
perror("write");
break;
}
if (strcmp(buf,"quit") == 0)
break;
close(fd_fifo);
}
return 0;
}
///B进程
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <errno.h>
#include <fcntl.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>
int main(int argc, const char *argv[])
{
umask(0);
if(mkfifo("./fifo",0777)<0)
{
if(errno!=17)
{
perror("mkfifo");
return -1;
}
}
while(1)
{
int fd_fifo=open("./fifo",O_WRONLY);
char buf[128];
printf("please input>>>");
fgets(buf,sizeof(buf),stdin);
buf[strlen(buf)-1]=0;
if(write(fd_fifo,buf,strlen(buf))<0)
{
perror("wirte");
break;
}
if(strcmp(buf,"quit")==0)
break;
close(fd_fifo);
fd_fifo=open("./fifo",O_RDONLY);
bzero(buf,sizeof(buf));
if(read(fd_fifo,buf,sizeof(buf))<0)
{
perror("read");
break;
}
if(strcmp(buf,"quit")==0)
break;
printf("%s\n",buf);
close(fd_fifo);
}
return 0;
}