#include<stdio.h>
#include<unistd.h>
#include<strings.h>
#include<string.h>
#include<unistd.h>
#include<stdlib.h>
/*要求实现父子进程对话
1.父进程先发送一句话给子进程,子进程接收后打印
2.子进程再回复一句话给父进程,父进程接收后打印
3.重复1.2步骤,当收到quit后,要结束父子进程
*/
int main(int argc, const char *argv[])
{
pid_t tx_1[2]={0};
pid_t tx_2[2]={0};
char arr[100]="";
//创建无名管道文件
if(pipe(tx_1)<0)
{
perror("pipe");
return -1;
}
if(pipe(tx_2)<0)
{
perror("pipe");
return -1;
}
pid_t pd=fork();
if(pd<0)
{
perror("fork");
return -1;
}
if(pd>0)
{
int l=0;
while(1)
{
printf("请在主进程中输入\n");
fgets(arr,sizeof(arr),stdin);
arr[strlen(arr)-1]='\0';
if(l=strcmp(arr,"quit")==0)
{
printf("程序以结束\n");
exit(10);
}
write(tx_1[1],arr,sizeof(arr));
bzero(arr,sizeof(arr));
read(tx_2[0],arr,sizeof(arr));
printf("主进程中输出\n");
arr[strlen(arr)-1]='\0';
if(l=strcmp(arr,"quit")==0)
{
printf("程序已结束\n");
exit(10);
}
fputs(arr,stdout);
printf("\n");
}
}
else if(pd==0)
{
while(1)
{
read(tx_1[0],arr,sizeof(arr));
printf("子进程中输出\n");
fputs(arr,stdout);
printf("\n");
printf("请在子进程中输入\n");
fgets(arr,sizeof(arr),stdin);
write(tx_2[1],arr,sizeof(arr));
}
}
return 0;
}
结果