1. ABプロセス対話を実現するための要件
- プロセス A はまずプロセス B に文を送信し、プロセス B はそれを受け取って印刷します。
- プロセスBはプロセスAに文を返信し、プロセスAはそれを受け取って印刷します。
- ステップ 1.2 を繰り返し、quit を受信したら、AB プロセスを終了します。
プロセス
#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;
}