IO day 4

news2024/11/19 14:26:36

1、使用两个进程完成两个文件的拷贝,父进程拷贝前一半内容,子进程拷贝后一半内容,并且父进程要阻塞回收子进程资源

#include <myhead.h>

int main(int argc, const char *argv[])
{
	char a[1] = {0};
	pid_t pid;
	pid = fork();//创建一个子进程
	int src = open(argv[1],O_RDONLY);
	if(src < 0)
	{
		perror("open error");
		return -1;
	}
	int dest = open(argv[2],O_RDWR|O_CREAT|O_TRUNC,0666);
	if(dest < 0)
	{
		perror("open error");
		return -1;
	}
    //计算机读取文件的字符个数
	int size = lseek(src,0,SEEK_END)-lseek(src,0,SEEK_SET);
	int halfsize = size / 2;
	ssize_t s;

	//开始打印

	if(pid < 0)
	{
		perror("fork error");
		return -1;
	}
	else if(pid == 0)//子进程
	{
		lseek(src,1,SEEK_SET);
		lseek(dest,1,SEEK_SET);
		for(int i = 0; i<halfsize; i++)
		{
			s = read(src,a,1);
			write(dest,a,s);
		}
	}
	else//父进程
	{
		lseek(src,0,SEEK_SET);
		lseek(dest,0,SEEK_SET);
		for(int i = 0; i<halfsize; i++)
		{
			s = read(src,a,1);
			write(dest,a,s);
		}
		//阻塞等待回收子进程资源
		wait(NULL);
	}

	return 0;
}

2、使用三个进程完成两个文件的拷贝,父进程拷贝前三分之一,子进程1拷贝中间三分之一,子进程2拷贝后三分之一,父进程要阻塞回收所有子进程资源

#include <myhead.h>

int main(int argc, const char *argv[])
{
	char a[1] = {0};
	pid_t pid;
	pid = fork();//创建一个子进程
	int src = open(argv[1],O_RDONLY);
	if(src < 0)
	{
		perror("open error");
		return -1;
	}
	int dest = open(argv[2],O_RDWR|O_CREAT|O_TRUNC,0666);
	if(dest < 0)
	{
		perror("open error");
		return -1;
	}
//计算机读取文件的字符个数
	int size = lseek(src,0,SEEK_END)-lseek(src,0,SEEK_SET);
	int len = size / 3;
	ssize_t s;

	//开始打印

	if(pid < 0)
	{
		perror("fork error");
		return -1;
	}
	else if(pid == 0)//子进程
	{
		lseek(src,1,SEEK_SET);
		lseek(dest,1,SEEK_SET);
		for(int i = 0; i<len; i++)
		{
			s = read(src,a,1);
			write(dest,a,s);
		}
	}
	else
	{
		pid_t pid2 = fork();//在父进程中再创建一个子进程
		if(pid2 < 0)
		{
			perror("fork error");
			return -1;
		}
		else if(pid2 == 0)
		{
			lseek(src,2,SEEK_SET);
			lseek(dest,2,SEEK_SET);
			for(int i = 0; i<len; i++)
			{
				s = read(src,a,1);
				write(dest,a,s);
			}
		}
		else//父进程
		{
			lseek(src,0,SEEK_SET);
			lseek(dest,0,SEEK_SET);
			for(int i = 0; i<len; i++)
			{
				s = read(src,a,1);
				write(dest,a,s);
			}
		//阻塞等待回收子进程资源
		wait(NULL);
		wait(NULL);
		}
	}

	return 0;
}

3、思维导图

 

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

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

相关文章

马哈鱼数据血缘工具背后的项目: gsp_demo_java 项目简单介绍与使用

0.背景 马哈鱼数据血缘工具(https://www.sqlflow.cn/)是SQLflow工具的中文译名,实际就是sqlflow. 对于SQL flow来说,底层调用的是General SQL Parser(GSP https://sqlparser.com) 的库. 这个gsp有开源的java demo项目:https://github.com/sqlparser/gsp_demo_java 1.快速使用…

Focus-DETR利用双重注意力机制重建编码器,打造最强目标检测模型

前期的文章我们介绍了DETR模型,我们知道DETR模型首先使用CNN卷积神经网络搜集图片的核心特征点,然后把这些特征点整合起来,通过embedding方法,把特征图片转换到特征向量空间。然后根据标准Transformer模型的编码器与解码器进行注意力机制的计算,最后把计算后的数据进行图片…

vue3+ts+vite使用el-breadcrumb实现面包屑组件,实现面包屑过渡动画

简介 使用 element-plus 的 el-breadcrumb 组件&#xff0c;实现根据页面路由动态生成面包屑导航&#xff0c;并实现面包屑导航的切换过渡动画 一、先看效果加粗样式 1.1 静态效果 1.2 动态效果 二、全量代码 <script lang"ts" setup> import { ref, watch…

5个高清视频素材网站

推荐5个高清视频素材网站&#xff0c;免费、付费、商用的都有&#xff0c;可根据自己需求去选择&#xff0c;赶紧收藏吧&#xff01; 菜鸟图库 https://www.sucai999.com/video.html?vNTYxMjky ​ 菜鸟图库网素材非常丰富&#xff0c;网站主要还是以设计类素材为主&#xff…

RCE远程命令执行

逻辑运算符:: &&&#xff1a;代表首先执行命令a&#xff0c;若成功再执行命令b&#xff0c;又被称为短路运算符。 &&#xff1a;代表首先执行命令a再执行命令b&#xff0c;不管a是否成功&#xff0c;都会执行命令b。在执行效率上来说“&&”更加高效。 ||&a…

合宙Air724UG LuatOS-Air LVGL API--简介

为何是 LVGL LVGL 是一个开源的图形库&#xff0c;它提供了创建嵌入式 GUI 所需的一切&#xff0c;具有易于使用的图形元素、漂亮的视觉效果和低内存占用的特点。 LVGL特点&#xff1a; 强大的 控件 &#xff1a;按钮、图表、列表、滑动条、图像等 高级图形引擎&#xff1a;动…

AIGC之文本内容生成概述(下)—— BERT

关于AIGC系列的文章内容&#xff0c;我们在上一期介绍了基础模型Transformer&#xff0c;本期将会继续介绍基于Transformer模型改进的BERT&#xff08;双向编码器表示Transformer&#xff09;模型。如果想要查之前的介绍内容&#xff0c;可以关注本号&#xff0c;翻看之前的文章…

九耶丨阁瑞钛伦特-在项目中找到的经典BUG是什么?

在项目中找到的经典BUG有很多种&#xff0c;以下是其中一些常见的例子&#xff1a; 空指针异常&#xff08;NullPointerException&#xff09;&#xff1a;当程序试图访问一个空对象或未初始化的变量时&#xff0c;会抛出空指针异常。这通常是由于缺少对变量的正确初始化或检查…

知识继承概述

文章目录 知识继承第一章 知识继承概述1.背景介绍第一页 背景第二页 大模型训练成本示例第三页 知识继承的动机 2.知识继承的主要方法 第二章 基于知识蒸馏的知识继承预页 方法概览 1.知识蒸馏概述第一页 知识蒸馏概述第二页 知识蒸馏第三页 什么是知识第四页 知识蒸馏的核心目…

java练习6. 求完数

题目: 请编程求出1000 以内的所有完数。 完数:一个数如果恰好等于它的所有真因子&#xff08;即除了自身外的所有因数&#xff09;之和&#xff0c;这个数就称为"完数"。 public static void main(String[] args) {for (int i 2; i < 1000; i) {int sum0;for (in…

最大公约数题--夏令营

题目&#xff1a; 知识点&#xff1a; 1。数论-欧几里得算法-gcd最大公因数性质 证明性质2&#xff0c;为什么两组的公约数相等&#xff0c;同样&#xff0c;最大公约数也相等 算法表示 int gcd(int a, int b) {return b 0 ? a : gcd(b, a % b); } 2.分析题目&#xff1a;…

java forEach中不能使用break和continue的原因

1.首先了解break和continue的使用范围和作用 1.1使用范围 break适用范围&#xff1a;只能用于switch或者是循环语句中。当然可以用于增强for循环。 continue适用范围: 用于循环语句中。 1.2作用 break: 1. break用于switch语句的作用是结束一个switch语句。 2. break用于循…

STM32单片机WIFI手机APP智能窗户窗帘控制系统手动自动定时

实践制作DIY- GC0163--WIFI手机APP智能窗户窗帘控制系统 基于STM32单片机设计---WIFI手机APP智能窗户窗帘控制系统 二、功能介绍&#xff1a; STM32F103C系列最小系统板5VUSB电源ULN2003控制的步进电机5个按键DS1302时钟芯片LCD1602显示器光敏电阻结合内部ADC采集光强DHT11温度…

FPGA_学习_17_IP核_ROM(无延迟-立即输出)

由于项目中关于厂商提供的温度-偏压曲线数据已经被同事放在ROM表了&#xff0c;我这边可用直接调用。 今天在仿真的时候&#xff0c;发现他的ROM表用的IP核是及时输出的&#xff0c;就是你地址给进去&#xff0c;对应地址的ROM数据就立马输出&#xff0c;没有延迟。 我打开他的…

聊聊@Accessors和@Builder

目录 Accessors和BuilderAccessors(chaintrue)BuilderAccessors和Builder的区别Accessors和Builder使用的坑 详细看看Accessors注解Accessors的源码Accessors属性说明fluent属性chain属性makeFinal属性prefix属性 Accessors和Builder Accessors(chaintrue) 就是new一个对象后…

2024秋招简历注意事项

互联网是一年比一年难&#xff0c;刚刚帮学弟修改了一下简历&#xff0c;学弟很强有项目有论文有比赛&#xff0c;但是我修改的时候感觉有点啰嗦&#xff0c;抓不住重点&#xff0c;所以在编写简历时&#xff0c;我觉得有几个要点一定要注意&#xff1a; 1. 简明扼要&#xff1…

C++之string类的使用

C之string类的使用 1.为什么要学string类2.标准库中的string类3.string类的接口的使用3.1默认成员函数3.2容量操作3.3访问操作3.4遍历操作3.5修改操作3.6字符串操作3.7非成员函数 1.为什么要学string类 我们所学的字符串是以’\0’结尾的一些字符的集合&#xff0c;为了操作方…

html | 基于iframe的简易富文本编辑器

效果图 支持: 选中后 ctrlI 斜体 代码 思路就是在iframe种嵌套html和css。 <pre> - 支持: 选中后 ctrlI 斜体 - todo: 鼠标实现单击斜体 </pre> <iframe name"richedit" style"height:30%; width:100%;"></iframe><script…

层叠上下文、层叠顺序

什么是层叠上下文 层叠上下文&#xff08;Stacking Context&#xff09;是指在 HTML 和 CSS 中&#xff0c;用于控制和管理元素层叠顺序以及呈现的一种机制。在一个网页中&#xff0c;许多元素&#xff08;例如文本、图像、背景等&#xff09;可能会重叠在一起&#xff0c;这时…

Hvv之Nacos漏洞分析与整改

目录 什么是nacos 漏洞复现过程 解压、修改配置文件、启动、 复现任意创建账户漏洞 问题分析 修改建议 什么是nacos Nacos 是阿里巴巴推出来的一个新开源项目&#xff0c;这是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。 NACOS界面提示“内部系统…