/********************************************read.c***************************************/
#include <myhead.h>
//创建线程体
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;
}
/********************************************write.c***************************************/
#include <myhead.h>
//创建线程体
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;
}