ABプロセス対話を既知のパイプで実現

1. ABプロセス対話を実現するための要件

  1. プロセス A はまずプロセス B に文を送信し、プロセス B はそれを受け取って印刷します。
  2. プロセスBはプロセスAに文を返信し、プロセスAはそれを受け取って印刷します。
  3. ステップ 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;
}

Guess you like

Origin blog.csdn.net/weixin_53478812/article/details/132136066