create.c
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<header.h>
int main(int argc, const char *argv[])
{
//创建有名管道文件
if(mkfifo("./myfifo",0664)!=0)
{
perror("mkfifo error");
return -1;
}
printf("myfifo create success\n");
if(mkfifo("./myfifo1",0664)!=0)
{
perror("mkfifo1 error");
return -1;
}
printf("myfifo1 create success\n");
puts("两个管道文件创建成功");
//使用getchar阻塞一下
getchar();
system("rm myfifo myfifo1");
return 0;
}
user1.c
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<header.h>
int main(int argc, const char *argv[])
{
//需要创建两个进程,父进程向管道1中写数据,子进程从管道2中读取数据
pid_t pid = -1;
pid = fork();
if(pid < 0)
{
perror("fork error");
return -1;
}
else if(pid == 0)
{
//子进程负责从管道2中读取数据
int rfd = -1;
if((rfd = open("./myfifo1", O_RDONLY)) == -1)
{
perror("open myfifo1 error");
return -1;
}
char buf[128] = "";
while(1)
{
//清空内容
bzero(buf, sizeof(buf));
//从管道2中读取数据
read(rfd, buf, sizeof(buf));
printf("读取的数据为:%s\n", buf);
if(strcmp(buf, "quit") == 0)
break;
}
//关闭文件
close(rfd);
//退出进程
exit(EXIT_SUCCESS);
}
else
{
//父进程负责向管道1中写数据
int wfd = -1;
if((wfd = open("./myfifo", O_WRONLY)) == -1)
{
perror("open myfifo error");
return -1;
}
char buf[128] = "";
while(1)
{
//清空数组
bzero(buf, sizeof(buf));
fgets(buf, sizeof(buf), stdin);
//将换行换成'\0'
buf[strlen(buf)-1] = '\0';
//将数据写入管道
write(wfd, buf, strlen(buf));
if(strcmp(buf, "quit") == 0)
break;
}
//关闭文件
close(wfd);
//回收子进程资源
wait(NULL);
}
return 0;
}
use2.c
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<header.h>
int main(int argc, const char *argv[])
{
//需要创建两个进程,父进程从管道1中读数据,子进程向管道2中写数据
pid_t pid = -1;
pid = fork();
if(pid < 0)
{
perror("fork error");
return -1;
}
else if(pid == 0)
{
//子进程负责向管道2中写数据
int wfd = -1;
if((wfd = open("./myfifo1", O_WRONLY)) == -1)
{
perror("open myfifo1 error");
return -1;
}
char buf[128] = "";
while(1)
{
//清空数组
bzero(buf, sizeof(buf));
fgets(buf, sizeof(buf), stdin);
//将换行换成'\0'
buf[strlen(buf)-1] = '\0';
//将数据写入管道
write(wfd, buf, strlen(buf));
if(strcmp(buf, "quit") == 0)
break;
}
//关闭文件
close(wfd);
//退出进程
exit(EXIT_SUCCESS);
}
else
{
//父进程负责从管道1中读数据
int rfd = -1;
if((rfd = open("./myfifo", O_RDONLY)) == -1)
{
perror("open myfifo error");
return -1;
}
char buf[128] = "";
while(1)
{
//清空内容
bzero(buf, sizeof(buf));
//从管道2中读取数据
read(rfd, buf, sizeof(buf));
printf("读取的数据为:%s\n", buf);
if(strcmp(buf, "quit") == 0)
break;
}
//关闭文件
close(rfd);
//回收子进程资源
wait(NULL);
}
return 0;
}