有名管道,创建两个发送接收端,父进程写入管道1和管道2,子进程读取管道2和管道1
管道文件1
int main(int argc,const char*argv[])
{
if(mkfifo("./pipes1",0664)==-1)
{
perror("./pipes1");
return -1;
}
return 0;
}
管道文件2
int main(int argc,const char*argv[])
{
if(mkfifo("./pipes2",0664)==-1)
{
perror("./pipes2");
return -1;
}
return 0;
}
文件2
int main(int argc,const char*argv[])
{
pid_t dir;
dir = fork();
if(dir==0)//子进程
{
char buff[100];
char tall[10] = "quit\n";
int fd2;
while(1)
{
memset(buff,0,sizeof(buff));//清空
fd2 = open("./pipes1",O_RDONLY);
if(fd2==-1)
{
perror("open2");
}
int len = read(fd2,buff,sizeof(buff));
write(1,buff,len);
if(strcmp(buff,tall)==0)
{
close(fd2);
exit(EXIT_SUCCESS);
break;
}
}
}
if(dir>0)//父进程
{
char buff[100];
char tall[10] = "quit\n";
int fd1;
while(1)
{
memset(buff,0,sizeof(buff));//清空
fd1 = open("./pipes2",O_WRONLY);
if(fd1==-1)
{
perror("open1");
return -1;
}
int len = read(0,buff,sizeof(buff));
write(fd1,buff,len);
if(strcmp(buff,tall)==0)
{
wait(NULL);
break;
}
}
}
return 0;
}
文件1
int main(int argc,const char*argv[])
{
pid_t dir;
dir = fork();
if(dir==0)//子进程
{
char buff[100];
char tall[10] = "quit\n";
int fd2;
while(1)
{
memset(buff,0,sizeof(buff));//清空
fd2 = open("./pipes2",O_RDONLY);
if(fd2==-1)
{
perror("open2");
}
int len = read(fd2,buff,sizeof(buff));
write(1,buff,len);
if(strcmp(buff,tall)==0)
{
close(fd2);
exit(EXIT_SUCCESS);
break;
}
}
}
else if(dir>0)//父进程
{
char buff[100];
char tall[10] = "quit\n";
int fd1;
while(1)
{
memset(buff,0,sizeof(buff));//清空
fd1 = open("./pipes1",O_WRONLY);
if(fd1==-1)
{
perror("open1");
return -1;
}
int len = read(0,buff,sizeof(buff));
write(fd1,buff,len);
if(strcmp(buff,tall)==0)
{
wait(NULL);
break;
}
}
}
return 0;
}