1、作业要求
2、实现过程
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
int main(int argc, const char *argv[])
{
//创建无名管道1
int pfd1[2] = {0};
if(pipe(pfd1)<0){
perror("pipe");
return -1;
}
//创建无名管道2
int pfd2[2] = {0};
if(pipe(pfd2)<0){
perror("pipe");
return -1;
}
char str[100] = "";
char str1[] = "quit";
size_t res = 0;
int flag = 0;
//创建一个子进程
pid_t pid = fork();
if(pid>0){ //父进程
while(1){
//从终端获取数据
printf("父进程发:");
fgets(str,sizeof(str),stdin);
str[strlen(str)-1] = '\0';
if(strcmp(str,str1)==0){ //输入quit退出
return 0;
}
//发送给子进程
if(res=(write(pfd1[1],str,sizeof(str)))<0){
perror("write");
return -1;
}
bzero(str,sizeof(str));
//读取子进程发送过来的数据
//当管道中没有数据时,read函数阻塞
res = read(pfd2[0],str,sizeof(str));
if(res<0){
perror("read");
return -1;
}
printf("父进程收:%s\n",str);
}
}
else if(0==pid){ //子进程
while(1){
bzero(str,sizeof(str));
//读取父进程发送过来的数据
//当管道中没有数据时,read函数阻塞
res = read(pfd1[0],str,sizeof(str));
if(res<0){
perror("read");
return -1;
}
printf("子进程收:%s\n",str);
bzero(str,sizeof(str));
printf("子进程发:");
//从终端获取数据
fgets(str,sizeof(str),stdin);
str[strlen(str)-1] = '\0';
if(strcmp(str,str1)==0){ //输入quit退出
return 0;
}
//发送给父进程
if(res=(write(pfd2[1],str,sizeof(str)))<0){
perror("write");
return -1;
}
}
}
else{
perror("fork");
return -1;
}
return 0;
}
3、实现效果