使用有名管道实现两个进程之间相互通信,提示:可以使用多线程或多进程实现
#include<head.h>
int main(int argc, const char *argv[])
{
umask(0);
//创建有名管道
if(mkfifo("./myfifo1",0777) !=0)
{
perror("mkfifo1 error\n");
return -1;
}
if(mkfifo("./myfifo",0777) != 0)
{
perror("mkfifo error\n");
return -1;
}
getchar();
system("rm myfifo myfifo1");
return 0;
}
#include<head.h>
void* callback(void* arg)
{
int rfd1;
if((rfd1 = open("./myfifo1",O_RDONLY)) == -1)
{
perror("open error");
}
char buf1[128]="";
while(1)
{
bzero(buf1,sizeof(buf1));
read(rfd1,buf1,sizeof(buf1));
if(strcmp(buf1,"quit") == 0)
{
printf("写进程退出,读进程也退出\n");
exit(0);
}
else
{
printf("读取的数据为:%s\n",buf1);
}
}
close(rfd1);
pthread_exit(NULL);
}
int main(int argc, const char *argv[])
{
pthread_t tid1;
if(pthread_create(&tid1,NULL,callback,NULL) != 0)
{
printf("tid1 error\n");
return -1;
}
int wfd;
if((wfd = open("./myfifo",O_WRONLY)) == -1)
{
perror("open error");
return -1;
}
//循环向文件写入数据
char buf[128]="";
while(1)
{
bzero(buf,sizeof(buf));
printf("请输入>>");
fgets(buf,sizeof(buf),stdin);
buf[strlen(buf)-1]=0;
//写入到管道文件中
write(wfd,buf,sizeof(buf));
//如果quit,退出进程
if(strcmp(buf,"quit") == 0)
{
printf("写进程退出\n");
exit(0);
}
}
close(wfd);
return 0;
}
#include<head.h>
void* callback(void* arg)
{
int wfd1;
if((wfd1 = open("./myfifo1",O_WRONLY)) == -1)
{
perror("open error");
}
char buf1[128]="";
while(1)
{
bzero(buf1,sizeof(buf1));
printf("请输入>>");
fgets(buf1,sizeof(buf1),stdin);
buf1[strlen(buf1)-1]=0;
write(wfd1,buf1,sizeof(buf1));
if(strcmp(buf1,"quit") == 0)
{
printf("写进程退出\n");
exit(0);
}
}
close(wfd1);
pthread_exit(NULL);
}
int main(int argc, const char *argv[])
{
pthread_t tid1;
if(pthread_create(&tid1,NULL,callback,NULL) != 0)
{
printf("tid1 error\n");
return -1;
}
int rfd;
if((rfd = open("./myfifo",O_RDONLY)) == -1)
{
perror("open error");
return -1;
}
char buf[128]="";
while(1)
{
bzero(buf,sizeof(buf));
read(rfd,buf,sizeof(buf));
if(strcmp(buf,"quit") == 0)
{
printf("写进程退出,读进程也退出\n");
exit(0);
}
else
{
printf("读取的数据为:%s\n",buf);
}
}
close(rfd);
return 0;
}