//要求实现父子进程对话//父进程先发送一句话给子进程,子进程接收后打印//子进程再回复一句话给父进程,父进程接收后打印//重复1.2步骤,当收到quit后,要结束父子进程

 实现过程:

//要求实现父子进程对话
//父进程先发送一句话给子进程,子进程接收后打印
//子进程再回复一句话给父进程,父进程接收后打印
//重复1.2步骤,当收到quit后,要结束父子进程
#include<stdio.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <stdlib.h>

int main(int argc, const char *argv[])
{
	char str[128]="";  //用于存储读取内容
	char quit[128]="告辞!"; //用于判断退出语句

	int pfd[2]={0};   //打开一个无名管道文件
	if(pipe(pfd)<0)
	{
		perror("pipe");
		return -1;
	}

	while(1)
	{

		//循环创建子进程
		pid_t pid=fork();


		if(pid>0)  //父进程执行
		{
			printf("父说>>>");  
			fgets(str,sizeof(str),stdin);  //从终端获取内容
			str[strlen(str)-1]='\0';    //将终端读取的\n换位\0;
			if(0==strcmp(str,quit))   //如果与退出语句一直,结束程序
			{
				return 0;
			}

			write(pfd[1],str,sizeof(str)); //将内容写入管道文件
			wait(NULL);                    //阻塞等待子进程退出

			read(pfd[0],str,sizeof(str));  //读取写入管道文件用于判断子进程中的输出内容
			write(pfd[1],str,sizeof(str));
			if(0==strcmp(str,quit))
			{
				return 0;
			}

			printf("父打印>>>");
			read(pfd[0],str,sizeof(str)); //读取管道文件,打印到终端
			fputs(str,stdout);
			printf("\n");

		}

		//子进程执行
		if(0==pid)
		{		
			printf("子打印>>>");            //打印管道文件内的内容
			read(pfd[0],str,sizeof(str));
			fputs(str,stdout);
			printf("\n");

			printf("子说>>>");              //从终端获取内容
			fgets(str,sizeof(str),stdin);
			str[strlen(str)-1]='\0'; 
			write(pfd[1],str,sizeof(str));  //写入管道文件

			exit(1); //退出程序
		}
	}
	return 0;
}

实现效果: 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值