多进程多线程之间相互通信
管道符创建文件myfifo.c
#include <myhead.h>
int main(int argc, const char *argv[])
{
if( mkfifo("./mkfifo1",0664) == -1)
{
perror("mkfifo error");
return -1;
}
if( mkfifo("./mkfifo2",0664) == -1)
{
perror("mkfifo error");
return -1;
}
getchar();
//删除管道
unlink("mkfifo1");
unlink("mkfifo2");
return 0;
}
用户一res.c
#include <myhead.h>
void *task1(void *arg)
{
int wfd1 = open("./mkfifo2",O_WRONLY);
if(wfd1 == -1)
{
perror("打开写文件失败!");
return NULL;
}
char wbuf[20]="";
while(1)
{
//写文件
printf("请输入>>>");
fgets(wbuf,sizeof(wbuf),stdin);
wbuf[strlen(wbuf)-1] = '\0'; //将最后的回车换成字符串结束符
write(wfd1,wbuf,strlen(wbuf));
printf("发送成功!\n");
if(strcmp(wbuf,"quit")== 0)
{
break;
}
}
close(wfd1);
pthread_exit(NULL);
return NULL;
}
void* task2(void* arg)
{
int rfd2 = open("./mkfifo1",O_RDONLY);
if(rfd2 == -1)
{
perror("打开读文件失败!");
return NULL;
}
char rbuf[20]="";
while(1)
{
bzero(rbuf,sizeof(rbuf)); //清空数组
read(rfd2,rbuf,sizeof(rbuf));
printf("收到消息为:%s\n",rbuf);
if(strcmp(rbuf,"quit")== 0)
{
break;
}
}
close(rfd2);
pthread_exit(NULL);
return NULL;
}
int main(int argc, const char *argv[])
{
//启动多个线程
pthread_t tid1,tid2;
//创建多线程
if(pthread_create(&tid1,NULL,task1,NULL) == 1)
{
printf("创建失败!\n");
return -1;
}
if(pthread_create(&tid2,NULL,task2,NULL) == 1)
{
printf("创建失败!\n");
return -1;
}
//等待线程结束
pthread_join(tid1,NULL);
pthread_join(tid2,NULL);
return 0;
}
用户二sen.c
#include <myhead.h>
void *task1(void *arg)
{
int wfd1 = open("./mkfifo1",O_WRONLY);
if(wfd1 == -1)
{
perror("打开写文件失败!");
}
char wbuf[20]="";
while(1)
{
//写文件
printf("请输入>>>");
fgets(wbuf,sizeof(wbuf),stdin);
wbuf[strlen(wbuf)-1] = '\0'; //将最后的回车换成字符串结束符
write(wfd1,wbuf,strlen(wbuf));
printf("发送成功!\n");
if(strcmp(wbuf,"quit")== 0)
{
break;
}
}
close(wfd1);
pthread_exit(NULL);
}
void* task2(void* arg)
{
int rfd2 = open("./mkfifo2",O_RDONLY);
if(rfd2 == -1)
{
perror("打开读文件失败!");
}
char rbuf[20]="";
while(1)
{
bzero(rbuf,sizeof(rbuf)); //清空数组
read(rfd2,rbuf,sizeof(rbuf));
printf("收到消息为:%s\n",rbuf);
if(strcmp(rbuf,"quit")== 0)
{
break;
}
}
close(rfd2);
pthread_exit(NULL);
}
int main(int argc, const char *argv[])
{
//启动多个线程
pthread_t tid1,tid2;
//创建多线程
if(pthread_create(&tid1,NULL,task1,NULL) == 1)
{
printf("创建失败!\n");
return -1;
}
if(pthread_create(&tid2,NULL,task2,NULL) == 1)
{
printf("创建失败!\n");
return -1;
}
//等待线程结束
pthread_join(tid1,NULL);
pthread_join(tid2,NULL);
return 0;
}
调试界面