第一个线程
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <fcntl.h>
#include <unistd.h>
#include <errno.h>
int main(int argc, const char *argv[])
{
if(mkfifo("./fifo1",0775)<0) //写的管道
{
if(17 != errno)
{
perror("mkfifo1:");
return -1;
}
}
printf("mkfifo success1\n");
if(mkfifo("./fifo2",0775)<0) //读的管道
{
if(17 != errno)
{
perror("mkfifo2:");
return -1;
}
}
printf("mkfifo success2\n");
//open写
int fd2 = open("./fifo1",O_RDWR);
if(fd2 < 0)
{
perror("openw:");
return -1;
}
printf("success open fd2\n");
//open读
int fd1 = open("./fifo2",O_RDWR);
if(fd1 < 0)
{
perror("openr:");
return -1;
}
printf("success open fd1\n");
//从管道写
char buf[128] = "";
while(1)
{
bzero(buf,sizeof(buf));
printf("左please input>>");
fgets(buf,sizeof(buf),stdin);
buf[strlen(buf)-1]=0;
if(strcmp(buf,"quit")==0)
{
break;
}
if(write(fd1,buf,sizeof(buf))<0)
{
perror("write:");
return -1;
}
printf("write success\n");
//从管道读
bzero(buf,sizeof(buf));
ssize_t res = 0;
res = read(fd2,buf,sizeof(buf));
if(res <0)
{
perror("read:");
return -1;
}
else if(res == 0)
{
printf("对端关闭\n");
return -1;
}
printf("%s\n",buf);
}
close(fd1);
close(fd2);
return 0;
}
第二个线程
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <fcntl.h>
#include <unistd.h>
#include <errno.h>
int main(int argc, const char *argv[])
{
if(mkfifo("./fifo2",0775)<0) //读的管道
{
if(17 != errno)
{
perror("mkfifo2:");
return -1;
}
}
printf("mkfifo success2\n");
if(mkfifo("./fifo1",0775)<0) //写的管道
{
if(17 != errno)
{
perror("mkfifo1:");
return -1;
}
}
printf("mkfifo success1\n");
//open读
int fd1 = open("./fifo2",O_RDWR);
printf("%d\n",fd1);
if(fd1 < 0)
{
perror("openr:");
return -1;
}
printf("success open fd1\n");
//open写
int fd2 = open("./fifo1",O_RDWR);
if(fd2 < 0)
{
perror("openw:");
return -1;
}
printf("success open fd2\n");
//从管道读
char buf[128] = "";
ssize_t res = 0;
while(1)
{
bzero(buf,sizeof(buf));
res = read(fd1,buf,sizeof(buf));
if(res <0)
{
perror("read:");
return -1;
}
else if(res == 0)
{
printf("对端关闭\n");
break;
}
printf("%s\n",buf);
//从管道写
bzero(buf,sizeof(buf));
printf("右please input>>");
fgets(buf,sizeof(buf),stdin);
buf[strlen(buf)-1]=0;
if(strcmp(buf,"quit")==0)
{
break;
}
if(write(fd2,buf,sizeof(buf))<0)
{
perror("write:");
return -1;
}
printf("write success\n");
}
close(fd1);
close(fd2);
return 0;
}