IODay7

#include 

//创建线程体
void *task(void *arg)
{
	//打开管道文件
	int fd = open("./fifo2",O_WRONLY);
	if(fd<0)
	{
		perror("open fifo2 error");
		return NULL;
	}
	while(1)
	{	
		char buf[128]="";
		fgets(buf,sizeof(buf),stdin);
		buf[strlen(buf)-1] = '\0';
		
		//将数据写入管道
		write(fd,buf,strlen(buf));

		if(strcmp(buf,"quit")==0)
		{
			break;
		}
	}
	//退出线程
	pthread_exit(NULL);
}
int main(int argc, const char *argv[])
{
	//创建管道
	if(mkfifo("./fifo1",0664)<0)
	{
		if(errno!=17)   //跳过17号错误:文件已存在
		{
			perror("mkfifo fifo1 error");
			return -1;
		}
	}

	if(mkfifo("./fifo2",0664)<0)
	{
		if(errno!=17)
		{
			perror("mkfifo fifo2 error");
			return -1;
		}
	}
	//创建子线程
	pthread_t tid;
	if(pthread_create(&tid,NULL,task,NULL))
	{
		printf("子线程创建失败\n");
		return -1;
	}

	//打开管道文件
	int fd = open("fifo1",O_RDONLY);
	if(fd<0)
	{
		perror("open fifo1 error");
		return -1;
	}
	while(1)
	{
		char buf[128]="";
		//从管道读取数据
		read(fd,buf,sizeof(buf));
		if(strcmp(buf,"quit")==0)
		{
			break;
		}
		printf("读取的信息为:%s\n",buf);
	}

	//回收线程资源
	pthread_join(tid,NULL);
	return 0;
}
#include 

//创建线程体
void *task(void *arg)
{
	//打开管道文件
	int fd = open("./fifo2",O_RDONLY);
	if(fd<0)
	{
		perror("open fifo2 error");
		return NULL;
	}
	while(1)
	{
		char buf[128]="";
		//从管道读取数据
		read(fd,buf,sizeof(buf));

		if(strcmp(buf,"quit")==0)
		{
			break;
		}
		printf("读取的信息为:%s\n",buf);
	}
	//退出线程
	pthread_exit(NULL);
}
int main(int argc, const char *argv[])
{
	//创建管道
	if(mkfifo("./fifo1",0664)<0)
	{
		if(errno!=17)
		{
			perror("mkfifo fifo1 error");
			return -1;
		}
	}
	if(mkfifo("./fifo2",0664)<0)
	{
		if(errno!=17)  //跳过17号错误:文件已存在
		{
			perror("mkfifo fifo2 error");
			return -1;
		}
	}

	//创建子线程
	pthread_t tid;
	if(pthread_create(&tid,NULL,task,NULL))
	{
		printf("子线程创建失败\n");
		return -1;
	}

	//打开管道文件
	int fd = open("fifo1",O_WRONLY);
	if(fd<0)
	{
		perror("open fifo1 error");
		return -1;
	}
	while(1)
	{
		char buf[128]="";
		fgets(buf,sizeof(buf),stdin);
		buf[strlen(buf)-1] = '\0';

		//将数据写入管道中
		write(fd,buf,strlen(buf));
		if(strcmp(buf,"quit")==0)
		{
			break;
		}
	}
	
	//回收线程资源
	pthread_join(tid,NULL);
	return 0;
}

 

你可能感兴趣的:(linux,linux)