create
#include <myhead.h>
int main(int argc, const char *argv[])
{
//创建有名管道文件,权限为0664
if (mkfifo("./myfifo1",0664) == -1)
{
perror("mkdir error");
return -1;
}
if (mkfifo("./myfifo2",0664) == -1)
{
perror("mkdir error");
return -1;
}
//阻塞主函数
getchar();
return 0;
}
#include <myhead.h>
//创建线程体
void *task(void *arg)
{
//定义文件描述符
int fd2;
//只写打开管道文件1
if ((fd2 = open("./myfifo1",O_WRONLY)) == -1)
{
perror("open fd2 error");
return NULL;
}
//循环写入管道文件1
while (1)
{
//定义容器
char buf[128] = "";
fgets(buf,sizeof(buf),stdin);
buf[strlen(buf)-1] = '\0';
//将数据写入管道文件中
write(fd2,buf,strlen(buf));
//如果输入的是再见就退出
if (strcmp(buf,"bye") == 0)
break;
}
//关闭文件
close(fd2);
//退出线程体
pthread_exit(NULL);
}
int main(int argc, const char *argv[])
{
//定义文件描述符
int fd1;
//创建线程
pthread_t tid1;
if (pthread_create(&tid1,NULL,task,NULL))
{
perror("create tid1 error");
return -1;
}
//只读打开管道文件2
if ((fd1 = open("./myfifo2",O_RDONLY)) == -1)
{
perror("open fd1 error");
return -1;
}
//循环读取管道文件2
while(1)
{
//定义容器
char buf[128] = "";
//读取数据
read(fd1,buf,sizeof(buf));
printf("小红:%s\n",buf);
//读取到再见时退出
if(strcmp(buf,"bye") == 0)
break;
}
//关闭文件
close(fd1);
//阻塞等待回收线程
pthread_join(tid1,NULL);
return 0;
}
#include <myhead.h>
//创建线程体
void *task(void *arg)
{
//定义文件描述符
int fd2;
//只写打开管道文件2
if ((fd2 = open("./myfifo2",O_WRONLY)) == -1)
{
perror("open fd2 error");
return NULL;
}
//循环写入管道文件2
while (1)
{
//定义容器
char buf[128] = "";
fgets(buf,sizeof(buf),stdin);
buf[strlen(buf)-1] = '\0';
//将数据写入管道文件中
write(fd2,buf,strlen(buf));
//如果输入的是再见就退出
if (strcmp(buf,"bye") == 0)
break;
}
//关闭文件
close(fd2);
//退出线程体
pthread_exit(NULL);
}
int main(int argc, const char *argv[])
{
//定义文件描述符
int fd1;
//创建线程
pthread_t tid1;
if (pthread_create(&tid1,NULL,task,NULL))
{
perror("create tid1 error");
return -1;
}
//只读打开管道文件1
if ((fd1 = open("./myfifo1",O_RDONLY)) == -1)
{
perror("open fd1 error");
return -1;
}
//循环读取管道文件1
while(1)
{
//定义容器
char buf[128] = "";
//读取数据
read(fd1,buf,sizeof(buf));
printf("小红:%s\n",buf);
//读取到再见时退出
if(strcmp(buf,"bye") == 0)
break;
}
//关闭文件
close(fd1);
//阻塞等待回收线程
pthread_join(tid1,NULL);
return 0;
}