create.c创建两个管道文件
#include <myhead.h>
int main(int argc, const char *argv[])
{
//创建一个有名管道文件
if(mkfifo("./myfifo1", 0664)==-1)
{
perror("mkfifo1 error");
return 0;
}
if(mkfifo("./myfifo2", 0664)==-1)
{
perror("mkfifo2 error");
return 0;
}
getchar();
unlink("myfifo1");
unlink("myfifo2");
return 0;
}
snd.c创建一个子进程,主进程发送的同时子进程接收
#include <myhead.h>
int main(int argc, const char *argv[])
{
pid_t pid = fork();
if(pid>0)
{
char wbuf[128] = "";
//以只写打开管道文件
int wfd = open("myfifo1", O_WRONLY);
if(wfd == -1)
{
perror("open error");
return -1;
}
printf("wfd = %d\n", wfd);
while(1)
{
printf("请输入>>>");
fgets(wbuf, sizeof(wbuf), stdin); //终端输入字符
wbuf[strlen(wbuf)-1] = 0; //'\n'换成'\0'
//写入管道中
write(wfd, wbuf, strlen(wbuf));
printf("发送成功\n");
if(strcmp(wbuf, "quit")==0)
{
break;
}
}
close(wfd);
}else if(pid == 0)
{
char rbuf[128] = "";
int rfd = open("myfifo2", O_RDONLY);
if(rfd == -1)
{
perror("open error");
return -1;
}
printf("rfd = %d\n", rfd);
while(1)
{
bzero(rbuf, sizeof(rbuf));
read(rfd, rbuf, sizeof(rbuf));
printf("收到消息为:%s\n", rbuf);
if(strcmp(rbuf, "quit") == 0)
{
break;
}
}
close(rfd);
}
wait(NULL);
return 0;
}
rec.c创建一个子进程,主进程接收的同时子进程发送
#include <myhead.h>
int main(int argc, const char *argv[])
{
pid_t pid = fork();
if(pid > 0)
{
char rbuf[128] = "";
//以只读打开管道文件
int rfd = open("myfifo1", O_RDONLY);
if(rfd == -1)
{
perror("open error");
return -1;
}
printf("rfd = %d\n", rfd);
while(1)
{
//读取前清空数据
bzero(rbuf, sizeof(rbuf));
//从管道文件中读取数据
read(rfd, rbuf, sizeof(rbuf));
printf("收到消息为:%s\n", rbuf);
if(strcmp(rbuf, "quit") == 0)
{
break;
}
}
close(rfd);
}else if(pid == 0)
{
char wbuf[128] = "";
int wfd = open("myfifo2", O_WRONLY);
if(wfd == -1)
{
perror("open error");
return -1;
}
printf("wfd = %d\n", wfd);
while(1)
{
printf("请输入>>>");
fgets(wbuf, sizeof(wbuf), stdin); //终端输入字符
wbuf[strlen(wbuf)-1] = 0; //'\n'换成'\0'
write(wfd, wbuf, strlen(wbuf));
printf("发送成功\n");
if(strcmp(wbuf, "quit")==0)
{
break;
}
}
close(wfd);
}
wait(NULL);
return 0;
}
下为效果图