有名管道,创建两个发送接收端,父进程写入管道1和管道2,子进程读取管道2和管道1.
创建管道1 管道2
#include<myhead.h>
int main(int argc, const char *argv[])
{
if(mkfifo("./my_fifo1",0664)==-1)
{
perror("myfifo1");
return -1;
}
if(mkfifo("./my_fifo2",0664)==-1)
{
perror("myfifo2");
return -1;
}
return 0;
}
父子进程1(父进程发送,子进程接收)
#include<myhead.h>
int main(int argc, const char *argv[])
{
pid_t pid1;
pid1 = fork();
if(pid1>0)
{
int send1;
send1 = open("./my_fifo1",O_WRONLY);
if(send1==-1)
{
perror("open1");
return -1;
}
char buff[1024];
while(1)
{
int len = read(0,buff,sizeof(buff));
write(send1,buff,len);
if(strcmp(buff,"quit")==0)
{
break;
}
}
close(send1);
}
else if(pid1==0)
{
int rev2;
rev2 = open("./my_fifo2",O_RDONLY);
if(rev2==-1)
{
perror("open2");
return -1;
}
char buff[1024];
while(1)
{
int len = read(rev2,buff,sizeof(buff));
write(1,buff,len);
if(strcmp(buff,"quit")==0)
{
break;
}
}
close(rev2);
}
else
{
perror("fork");
return -1;
}
return 0;
}
父子进程2(父进程发送,子进程接收)
#include<myhead.h>
int main(int argc, const char *argv[])
{
pid_t pid2;
pid2 = fork();
if(pid2>0)
{
int send2;
send2 = open("./my_fifo2",O_WRONLY);
if(send2==-1)
{
perror("open2");
return -1;
}
char buff[1024];
while(1)
{
int len = read(0,buff,sizeof(buff));
write(send2,buff,len);
if(strcmp(buff,"quit")==0)
{
break;
}
}
close(send2);
}
else if(pid2==0)
{
int rev1;
rev1 = open("./my_fifo1",O_RDONLY);
if(rev1==-1)
{
perror("open1");
return -1;
}
char buff[1024];
while(1)
{
int len = read(rev1,buff,sizeof(buff));
write(1,buff,len);
if(strcmp(buff,"quit")==0)
{
break;
}
}
close(rev1);
}
else
{
perror("fork");
return -1;
}
return 0;
}