1.思维导图:
2.使用管道实现AB两个进程之间的互相通信
creat2.c:
#include <myhead.h>
int main(int argc, const char *argv[])
{
//创建管道文件
if(mkfifo("./myfifo",0664)!=0){//这个用write2写 read2读
perror("mkfifo error");
return -1;
}
if(mkfifo("./myfifo2",0664)!=0){//这个用read2写 write2读
perror("mkfifo2 error");
return -1;
}
//阻塞等待其他进程使用管道
getchar();
//通过代码执行终端指令
system("rm myfifo");
system("rm myfifo2");
return 0;
}
write2.c:
#include <myhead.h>
int main(int argc, const char *argv[])
{
int fd,fd2;//文件描述符
char buf[128] = "";
char buf2[128];
//打开有名管道文件
if((fd = open("./myfifo",O_WRONLY))==-1)
{
perror("open error");
return -1;
}
if((fd2 = open("./myfifo2",O_RDONLY))==-1)
{
perror("open2 error");
return -1;
}
while(1){
fgets(buf,sizeof(buf),stdin);
//清掉'\n'
buf[strlen(buf)-1] = '\0';
write(fd,buf,strlen(buf));//往myfifo中写buf中数据
if(strcmp(buf,"quit")==0){//当向buf写quit程序结束
break;
}
memset(buf2,0,sizeof(buf2));//清空buf2
read(fd2,buf2,sizeof(buf2));//从myfifo2中取数据放入buf2
if(strcmp(buf2,"quit")==0){//当从buf2中接收到quit程序结束
break;
}
printf("接收到:%s\n",buf2);//在终端显示buff2中数据
}
close(fd);//关闭myfifo
close(fd2);//关闭myfifo2
return 0;
}
read2.c:
#include <myhead.h>
int main(int argc, const char *argv[])
{
int fd,fd2;//定义文件描述符
char buf[128];
char buf2[128] = "";
//打开有名管道文件
if((fd =open("./myfifo",O_RDONLY))==-1){
perror("open error");
return -1;
}
if((fd2 =open("./myfifo2",O_WRONLY))==-1){
perror("open2 error");
return -1;
}
while(1){
memset(buf,0,sizeof(buf));
read(fd,buf,sizeof(buf));
if(strcmp(buf,"quit")==0)
{
break;
}
printf("接收到:%s\n",buf);
fgets(buf2,sizeof(buf2),stdin);
//清掉‘\n’
buf2[strlen(buf2)-1] = '\0';
write(fd2,buf2,strlen(buf2));
if(strcmp(buf2,"quit")==0)
break;
}
close(fd);
close(fd2);
return 0;
}