操作系统-父子进程通信-c语言编程实现

创建父子2个进程A,B。进程A不断获取用户从键盘输入的字符串或整数,通过信号机制传给进程B。如果输入的是字符串,进程B将其打印出来;如果输入的是整数,进程B将其累加起来,并输出该数和累加的和。当累加和大于100时结束子进程,子进程输出“My work done!”后结束,然后父进程也结束。编写程序实现,并给出测试结果。

#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
#include <strings.h>

main(){
	int r, p, fd1[2], fd2[2];
	char buf[50], s[50], massr[50];
	char flag[50] = "My work is dong!";
	char massw[50] = "My work done!";
	int i = 0, sum = 0, num = 0;
	pipe(fd1);		//父进程建立管道
	pipe(fd2);
	while((p = fork()) == -1);	
	if(p == 0){		//由子进程P1返回,执行子进程P1
		close(fd1[1]);		//关闭管道1写入端 
		close(fd2[0]);		//关闭管道2读出端
		write(fd2[1], flag, 50);
		while(read(fd1[0], s, 50)){
			while(s[i] >= '0' &&s[i] <= '9'){
				i++;
			}
			if(i == strlen(s)){
				num = atoi(s);
				sum += num;
				printf ("message is number : %d\n", num);
				printf ("sum of number : %d\n", sum);
				if(sum > 100){
					write(fd2[1], massw, 50);
					printf ("My work done!\n");
					sleep(1);
					break;
				}else{
					write(fd2[1], flag, 50);
					sleep(1);
				}	
			}else{
				printf ("message of child process receive:\n");
				printf ("%s\n", s);
				write(fd2[1], flag, 50);
				sleep(1);
			}	 
		}
		exit(0);     //关闭 	
	}else{
		close(fd1[0]);
		close(fd2[1]);
		while(read(fd2[0], massr, 50)){
			if(strcmp(massr, "My work done!") == 0) {
				printf ("receive My work done, program is exiting!\n");
				break;
			}else{
				printf ("please input your message!\n");
				scanf("%s", buf);
				write(fd1[1], buf, 50);	//把buf中的50个字符写入管道 
				sleep(1);		//睡眠5秒,让子进程读
			}
		}
		printf ("exited!\n");
		exit(0);	
	}
	
} 

结果:

  • 3
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员Ale-阿乐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值