使用有名管道实现两个进程之间相互通信,提示:可以使用多线程或多进程实现
#include <head.h>
int main(int argc, const char *argv[])
{
pid_t cpid=fork();
if(cpid>0)
{
if(mkfifo("./myfifo1.c",0664)!=0)
{
ERR_MSG("mkfifo");
return -1;
}
}
else if(cpid==0)
{
if(mkfifo("./myfifo2.c",0664)!=0)
{
ERR_MSG("mkfifo");
return -1;
}
exit(0);
}
else if(cpid<0)
{
ERR_MSG("fork");
return -1;
}
wait(NULL);
getchar();
system("rm myfifo1.c myfifo2.c");
return 0;
}
//creat
#include <head.h>
int main(int argc, const char *argv[])
{
pid_t cpid=fork();
if(cpid>0)
{
int wpd;
if((wpd=open("./myfifo1.c",O_WRONLY))==-1)
{
ERR_MSG("open");
return -1;
}
char buf[100]="";
while(1)
{
bzero(buf,sizeof(buf));
printf("write请输入:");
fgets(buf,sizeof(buf),stdin);
buf[strlen(buf)-1]='\0';
write(wpd,buf,sizeof(buf));
if(strcmp(buf,"quit")==0)
{
printf("write写进程退出\n");
break;
}
}
close(wpd);
}
else if(cpid==0)
{
int rfd;
if((rfd=open("./myfifo2.c",O_RDONLY))==-1)
{
ERR_MSG("open");
return -1;
}
char brr[100]="";
while(1)
{
bzero(brr,sizeof(brr));
read(rfd,brr,sizeof(brr));
if(strcmp(brr,"quit")==0)
{
printf("write读进程退出\n");
break;
}
puts("");
printf("write读到的数据:%s\n",brr);
}
close(rfd);
exit(0);
}
else if(cpid<0)
{
ERR_MSG("fork");
return -1;
}
wait(NULL);
return 0;
}
//write
#include <head.h>
int main(int argc, const char *argv[])
{
pid_t cpid=fork();
if(cpid>0)
{
int rfd;
if((rfd=open("./myfifo1.c",O_RDONLY))==-1)
{
ERR_MSG("open");
return -1;
}
char brr[100]="";
while(1)
{
bzero(brr,sizeof(brr));
read(rfd,brr,sizeof(brr));
if(strcmp(brr,"quit")==0)
{
printf("read读进程退出\n");
break;
}
puts("");
printf("read读到的数据:%s\n",brr);
}
close(rfd);
}
else if(cpid==0)
{
int wpd;
if((wpd=open("./myfifo2.c",O_WRONLY))==-1)
{
ERR_MSG("open");
return -1;
}
char buf[100]="";
while(1)
{
bzero(buf,sizeof(buf));
printf("read请输入:");
fgets(buf,sizeof(buf),stdin);
buf[strlen(buf)-1]='\0';
write(wpd,buf,sizeof(buf));
if(strcmp(buf,"quit")==0)
{
printf("read写进程退出\n");
break;
}
}
close(wpd);
exit(0);
}
else if(cpid<0)
{
ERR_MSG("fork");
return -1;
}
wait(NULL);
return 0;
}
//read