Mit6.S081-实验1-Xv6 and Unix utilities-pingpong问题

news2024/12/25 12:38:47

Mit6.S081-实验1-Xv6 and Unix utilities-pingpong问题

在进行pingpong实验的时候遇到了许多问题在这里记录一下。

1.输出乱序问题
在这里插入图片描述
出现这个问题主要是因为没有弄懂wait(0)的作用,

wait(0)暂时停止目前进程的执行,直到信号来到或子进程结束,如果在调用wait(0)时子进程已经结束,则wait(0)会立即返回子进程结束状态值。
作者:桀异-Noneofmine https://www.bilibili.com/read/cv8074900/ 出处:bilibili
在父进程和子进程之间使用pipe管道传输数据时,需要等待子进程的传输完成后,父进程再进行读取

pingping实验对管道的读写顺序应该如下:
1、父进程在管道写端写入信息
2、子进程在管道读端读取数据
3、子进程在管道写端写入信息
4、父进程再管道读端读取数据

如果使用一个管道完成应该在每次读写之后关闭所使用的端口,如果使用两个管道完成,应该先关闭不使用的端口

子进程读写管道过程

	if(fork()==0)
	{
		if(read(p1[0],buf,msgsize)!=msgsize)
		{
			printf("c r p1[0] error\n");
			exit(1);
		}
		
		close(p1[0]);

		printf("%d: received %s\n",getpid(),buf);

		if(write(p1[1],"pong",msgsize)!=msgsize)
		{
			printf("c w p1[1] error\n");
			exit(1);
		
		}
		close(p1[1]);
		exit(0);
	}

父进程读写管道过程

if(write(p1[1],"ping",msgsize)!=msgsize)
	{
		printf("f w p1[1] error\n");
		exit(1);
	}
	close(p1[1]);

	wait(0);  //注意在父进程中读取管道信息之前应该等待子进程完成写入信息操作,所以在这里使用wait

	if(read(p1[0],buf,msgsize)!=msgsize)
	{
		printf("f r p2[0] error\n");
		exit(1);
	}
	close(p1[0]);

	printf("%d: received %s\n",getpid(),buf);
	exit(0);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/384219.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何让自动化测试框架更自动化?

一、引言 ​对于大厂的同学来说,接口自动化是个老生常谈的话题了,毕竟每年的MTSC大会议题都已经能佐证了,不是大数据测试,就是AI测试等等(越来越高大上了)。不可否认这些专项的方向是质量智能化发展的方向…

csgo搬砖项目,真的能月入6k?

01 相信很多粉丝都知道steam这个平台,steam是一个游戏平台,这里面的游戏都是要通过去充值购买才能去玩,有的是买游戏的账号,有的是买这个游戏的使用权,买了之后安装到手机上或者电脑上我们才能去畅玩游戏,…

【人工智能 Open AI 】我们程序员真的要下岗了- 全能写Go / C / Java / C++ / Python / JS 人工智能机器人

文章目录[toc]人工智能 AI Code 写代码测试用golang实现冒泡排序用golang实现计算环比函数goroutine and channel用golang实现二叉树遍历代码用golang实现线程安全的HashMap操作代码using C programming language write a tiny Operation Systemuse C language write a tiny co…

【9】SCI易中期刊推荐——工程技术-计算机:软件工程(中科院4区)

🚀🚀🚀NEW!!!SCI易中期刊推荐栏目来啦 ~ 📚🍀 SCI即《科学引文索引》(Science Citation Index, SCI),是1961年由美国科学信息研究所(Institute for Scientific Information, ISI)创办的文献检索工具,创始人是美国著名情报专家尤金加菲尔德(Eugene Garfield…

电脑C盘满了,怎么清理c盘空间?

电脑的C盘是系统盘,存储着操作系统和软件等关键文件,因此当C盘空间不足时,电脑的性能和稳定性都会受到影响。 真实案例:c盘空间莫名其妙变小? “C盘快满了不敢乱删,请问该如何清理?” “求大佬…

八股文(一)

一、箭头函数和普通函数有什么区别 (1)箭头函数比普通函数更加简洁 (2)箭头函数没有自己的this 箭头函数不同于传统JavaScript中的函数,箭头函数并没有属于⾃⼰的this,它所谓的this是捕获其所在上下⽂的 this 值,作为⾃⼰的 this 值&#…

希赛PMP模拟题2022(第9套)

希赛PMP模拟题2022(第9套) 22 需求和范围 区别 21 什么阶段? 在开发过程中不断衡量 价值 和优先级关系排序20 产品路线图 回顾 团队沟通方式 无法面对面沟通时候 其他人参与 了解项目 需求发布计划 风险 排序发表计划 vs 评审会议 老母鸡 是…

ESP-C3入门14. 实现基本的web server

ESP-C3入门14. 实现基本的web server一、ESP32 IDF创建WEB SERVER的流程1. 配置web服务器2. 注册 URI处理器3. 实现 URI处理器函数4. 处理HTTP请求5. 处理web socket连接6. 注册 URI 处理函数7. 启动HTTP服务器8. 发送响应9. 关闭 http 服务二、本要主要使用API的说明1. httpd_…

编码器的作用和功能有哪些

编码器的作用和功能有哪些 最近很多咨询编码器的作用的,小编结合一下线上和线下的资料,总结了一下,供大家参考。 要说编码器,它的作用很多,主要是用来测量机械运动的速度、位置、角度、距离或计数的,编码器…

SkyWalking使用案例-2

文章目录SkyWalking实现基于容器环境Dubbo微服务链路跟踪部署Dubbo Provider构建Dubbo Provider镜像运行dubbo-provider部署Dubbo Consumer构建Dubbo Consumer镜像运行dubbo-consumer验证SkyWalking收集python项目数据Skywalking告警Skywalking指标Skywalking告警规则SkyWalkin…

62. 不同路径

62. 不同路径 一个机器人位于一个 m∗nm * nm∗n 网格的左上角 (起始点在下图中标记为 “Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。 问总共有多少条不同的路…

virtualbox7虚拟机中安装苹果macOS big sur系统详细教程

第1步,在 Windows 10/11 PC 上启用虚拟化。 现在的电脑一般都默认开启虚拟化技术了。 如果你遇到一些报错,比如收到错误消息“无法在虚拟机上打开会话”,可以查看 如果没有遇到问题,可以直接进入到第二步。 第2步,在…

【Spark分布式内存计算框架——Spark Streaming】12. 偏移量管理(上)代码重构与Checkpoint 恢复

6. 偏移量管理 针对前面实现【百度热搜排行榜Top10】实时状态统计应用来说,当应用关闭以后,再次启动(Restart)执行,并没有继续从上次消费偏移量读取数据和获取以前状态信息,而是从最新偏移量(L…

JVM 不同垃圾回收器的日志格式分析

1、GC日志采集 在服务器上我们需要配置一些参数才能采集到历史的GC日志信息,这些参数通常在项目启动的时候就需要指定, 如果你项目是jar包,可以按照下面方式指定这些GC参数即可。 下面这些参数意思是把GC日志记录到/opt/app/abc-user/ard-…

蓝桥杯备赛——Echarts学习

文章目录前言学习 ECharts 的方法快速上手基础知识option 配置选项可选配置title 标题组件tooltip 提示框组件axisPointer 坐标轴指示器legend 图例组件toolbox 工具栏坐标轴xAxis和yAxisseries ([ ]用数组表示,数组里是一个个数据对象)饼状图散点图交互…

盘点代码情诗集合❤,程序员表白的巅峰之作,特此奉献

程序员怎么表白?写代码啊!每到情人节,程序员们就纷纷出动,各种别出心裁的表白代码倾囊相送。我曾被大批表白代码砸晕,沉浸在“虚拟的”幸福感中不能自拔。我在众多代码中精选了以下几十条,每一条都是文学素…

Python中的遍历字典的键和值

一、Python的字典在项目的开发过程中,如果遇到有映射关系的内容可以考虑使用Python中的字典进行存储数据,字典中冒号前的数据称为【键】、冒号后的数据称为【值】。二、Python字典的用法2.1、Python的定义#Python字典的定义 字典名称{键1:值1,键2:值2,键…

JavaScript Date 日期对象

文章目录JavaScript Date 日期对象Date 对象Date 对象属性Date 对象方法创建日期设置日期两个日期比较JavaScript Date 日期对象 日期对象用于处理日期和时间。 Date 对象 Date 对象用于处理日期与实际。 创建 Date 对象: new Date(). 以上四种方法同样可以创建…

Validate端口使用手册

知行之桥EDI系统从2020版本开始引入了Validate端口,用来实现对XML数据文件进行一些规则的验证,保证XML数据文件的有效性。本文将介绍如何使用Validate端口。 端口创建 同其他功能性端口一样,只需要将Validata端口从左侧的端口清单拖拽到右侧…

子数组达到规定累加和的最大长度系列问题

文章目录1、题目一:正整数数组中子数组累加和 KKK 最大长度1.1 题目描述1.2 思路分析1.3 代码实现2、题目二:整数数组中子数组累加和为 KKK 的最大长度2.1 题目描述2.2 思路分析2.3 代码实现2.4 引申变形2.5 技巧应用题2.5.1 剑指 Offer II 010. 和为 k …