使用有名管道完成两个进程间的通信
1.创建两个有名管道
#include<head.h>
int main(int argc, const char *argv[])
{
//调用mkfifo函数创建一个管道文件
if(mkfifo("myfifo", 0664) == -1)
{
perror("mkfifo error");
return -1;
}
//调用fifo函数创建一个管道文件
if(mkfifo("fifo", 0664) == -1)
{
perror("fifo error");
return -1;
}
getchar(); //阻塞
system("rm myfifo"); //删除当前目录下的管道文件
system("rm fifo"); //删除当前目录下的管道文件
return 0;
}
2.创建两个进程
#include<head.h>
int main(int argc, const char *argv[])
{
//1、打开管道文件
int rfd= -1;
if((rfd = open("./myfifo", O_RDONLY)) == -1)
{
perror("rfd open error");
return -1;
}
//1、打开管道文件
int wfd= -1;
if((wfd = open("./fifo", O_WRONLY)) == -1)
{
perror("wfd open error");
return -1;
}
//从管道文件中读取数据
char rbuf[128] = "";
while(1)
{
//清空内容
bzero(rbuf, sizeof(rbuf));
//将数据从管道文件中读取出来
read(rfd, rbuf, sizeof(rbuf));
printf("收到一条消息:%s\n", rbuf);
//判断是否要退出
if(strcmp(rbuf, "quit") == 0)
{
break;
}
}
char wbuf[128] = "";
while(1)
{
printf("请输入>>>");
fgets(wbuf, sizeof(wbuf), stdin); //从终端输入字符串
wbuf[strlen(wbuf) - 1] = 0;
//将字符串写入管道中
write(wfd, wbuf, sizeof(wbuf));
//判断是否要退出
if(strcmp(wbuf, "quit") == 0)
{
break;
}
}
//关闭管道文件
close(rfd);
close(wfd);
return 0;
}
#include<head.h>
int main(int argc, const char *argv[])
{
//1、打开管道文件
int wfd= -1;
if((wfd = open("./myfifo", O_WRONLY)) == -1)
{
perror("wfd open error");
return -1;
}
//1、打开管道文件
int rfd= -1;
if((rfd = open("./fifo", O_RDONLY)) == -1)
{
perror("rfd open error");
return -1;
}
//向管道文件中写入数据
char wbuf[128] = "";
while(1)
{
printf("请输入>>>");
fgets(wbuf, sizeof(wbuf), stdin); //从终端输入字符串
wbuf[strlen(wbuf) - 1] = 0;
//将字符串写入管道中
write(wfd, wbuf, sizeof(wbuf));
//判断是否要退出
if(strcmp(wbuf, "quit") == 0)
{
break;
}
}
//从管道文件中读取数据
char rbuf[128] = "";
while(1)
{
//清空内容
bzero(rbuf, sizeof(rbuf));
//将数据从管道文件中读取出来
read(rfd, rbuf, sizeof(rbuf));
printf("收到一条消息:%s\n", rbuf);
//判断是否要退出
if(strcmp(rbuf, "quit") == 0)
{
break;
}
}
//关闭管道文件
close(wfd);
close(rfd);
return 0;
}