IO作业4.0

news2025/4/8 15:33:52

思维导图

创建出三个进程完成两个文件之间拷贝工作,子进程1拷贝前一半内容,子进程2拷贝后一半内容,父进程回收子进程的资源

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <myhead.h>
int main(int argc, const char *argv[])
{
	//判断外部传参
	if(argc != 3)
	{
		perror("error");
		return -1;
	}
	//定义文件指针
	FILE * fp = NULL;
	FILE * fq = NULL;
	//以只读
	if((fp=fopen(argv[1], "r")) == NULL)
	{
		perror("open error");
		return -1;
	}

	//以只写
	if((fq=fopen(argv[2], "w")) == NULL)
	{
		perror("open error");
		return -1;
	}
	char buf[128]="";
	int count = 0; //计数器
	fseek(fp, 0, SEEK_END); //光标偏移到最后
	count = ftell(fp);
	//fseek(fp, 0, SEEK_SET);//光标偏移到开头

	pid_t pid1 = -1;
	pid1 = fork();//创建一个子进程
	if(pid1 == 0)
	{
		printf("子进程1\n");	
		printf("拷贝内容为后一半\n");
		memset(buf, 0, sizeof(buf)); //清零
		fseek(fp, count/2,SEEK_SET); //光标后移
		fseek(fq, count/2,SEEK_SET); //光标后移
		while(ftell(fp) != count)//文件读写到最后结束循环
		{
			int num=fread(buf,1,sizeof(buf),fp);
			fwrite(buf,1,num,fq);
		}
		//关闭文件
		fclose(fp);
		fclose(fq);

		exit(EXIT_SUCCESS);
	}
	else if(pid1 > 0)
	{
		pid_t pid2 = fork(); //创建另一个子进程
		if(pid2 == 0)
		{
			printf("子进程2\n");
			printf("拷贝内容为前一半\n");
			memset(buf, 0, sizeof(buf)); //清零
			int sum = 0;
			while(ftell(fp) < count/2)
			{
				int num=fread(buf,1,sizeof(buf),fp);
				sum+=num;
				if(sum>=count/2)
				{
					fwrite(buf,1,num-(sum-count/2),fq);
					break;
				}
				fwrite(buf,1,num,fq);
			}	
			//关闭文件
			fclose(fp);
			fclose(fq);

			exit(EXIT_SUCCESS);
		}
		else if(pid2 > 0)
		{
			wait(NULL);
			wait(NULL);
			printf("父进程已回收资源\n");

		}
		else 
		{
			perror("fork error");
			return -1;
		}
	}
	else 
	{
		perror("fork error");
		return -1;
	}
	//关闭文件
	fclose(fp);
	fclose(fq);

	printf("拷贝成功\n");
	return 0;
}

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

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

相关文章

CCNP课程实验-07-OSPF-Trouble-Shooting

目录 实验条件网络拓朴 环境配置开始排错错点1&#xff1a;R1-R2之间认证不匹配错误2&#xff1a;hello包的时间配置不匹配错误3&#xff1a;R2的e0/1接口区域配置不正确错误4&#xff1a;R4的e0/1接口没有配置进OSPF错误5&#xff1a;R2的区域1没有配置成特殊区域错误6&#x…

ASP.NETCore WebAPI 入门 杨中科

ASP.NETCore WebAPI入门1 回顾 mvc开发模式 前端代码和后端代码是混在一个项目之中 WEB API 1、什么是结构化的Http接口。Json。 2、Web API项目的搭建。 3、Web API项目没有Views文件夹。 4、运行项目&#xff0c;解读代码结构。 5、【启用OpenAPI支持】→>swagger,在界…

Pytorch从零开始实战15

Pytorch从零开始实战——ResNeXt-50算法实战 本系列来源于365天深度学习训练营 原作者K同学 文章目录 Pytorch从零开始实战——ResNeXt-50算法实战环境准备数据集模型选择开始训练可视化总结 环境准备 本文基于Jupyter notebook&#xff0c;使用Python3.8&#xff0c;Pytor…

高效分割视频:批量剪辑,轻松提取m3u8视频技巧

在数字媒体时代&#xff0c;视频分割是一项常见的需求。无论是为了编辑、分享还是其他要求&#xff0c;经常要将长视频分割成多个短片。传统的视频分割方法往往需要手动操作&#xff0c;既耗时又容易出错。现在来看云炫AI智剪高效分割视频的方法&#xff0c;批量剪辑并轻松提取…

nest框架的bull队列的基本使用

前言 nestjs/bull是一个用于处理队列的Nest.js模块。它基于Bull库&#xff0c;提供了在Nest框架中使用队列的功能&#xff0c;这个模块要跟redis联合起来使用 1.下载队列模块&#xff1a; npm install --save nestjs/bull bull redis 项目结构&#xff1a; 2. 在模块中导入B…

佳能G3800彩色喷墨多功能一体打印机报5B00错误代码处理方法

5B00错误代码的含义 5B00错误代码是指佳能G3800打印机的“废墨仓已满”。这个废墨仓是打印机内部的一个部件&#xff0c;主要用于收集打印过程中产生的废墨。当废墨仓已满时&#xff0c;打印机就会报5B00错误代码。 佳能G3800彩色喷墨多功能一体打印机报5B00错误代码处理办法 …

vue3中标签form插件

想写一个系统&#xff0c;对八字进行标注&#xff0c;比如格局&#xff0c;有些八字就有很多格局&#xff0c;于是就想着使用el-tag但是&#xff0c;form表单中如何处理呢&#xff1f; 这个时候&#xff0c;就需要自己写一个,modelValue是表单的默认属性 <template><…

uniCloud 云数据库(新建表、增、删、改、查)

新建表结构描述文件 todo 为自定义的表名 表结构描述文件的默认后缀为 .schema.json 设置表的操作权限 uniCloud-aliyun/database/todo.schema.json 默认的操作权限都是 false "permission": {"read": false,"create": false,"update&quo…

stm32学习总结:5、Proteus8+STM32CubeMX+MDK仿真串口并使用串口打印日志(注意重定向printf到串口打印的问题)

stm32学习总结&#xff1a;5、Proteus8STM32CubeMXMDK仿真串口并使用串口打印日志&#xff08;注意重定向printf到串口打印的问题&#xff09; 文章目录 stm32学习总结&#xff1a;5、Proteus8STM32CubeMXMDK仿真串口并使用串口打印日志&#xff08;注意重定向printf到串口打印…

网工内推 | 事业单位、上市公司网工,五险一金补贴多

01 中科中山药物创新研究院 招聘岗位&#xff1a;网络工程师 职责描述&#xff1a; 1.负责信息化网络数据安全&#xff0c;加固网络安全、渗透测试、风险评估、漏洞扫描、风险管理和风险评估方法。对防火墙、IDS、IPS、蜜罐、防DDOS、VPN等设备的运行管理&#xff1b; 2.负责机…

FPGA——VIVADO生成固化文件,掉电不丢失

VIVADO生成固化文件 (1)加入代码(2)生成bin文件&#xff0c;并且下载 (1)加入代码 设计文件(.xdc)中加入这段代码: set_property CFGBVS VCCO [current_design] set_property CONFIG_VOLTAGE 3.3 [current_design] set_property BITSTREAM.GENERAL.COMPRESS true [current_de…

斯坦福和 Meta学者发现Gemini在常识推理任务中有较强潜力;初学者GPT:Ai和LLM资源

&#x1f989; AI新闻 &#x1f680; 斯坦福和 Meta学者发现Gemini在常识推理任务中有较强潜力 摘要&#xff1a;斯坦福和Meta的学者发表论文为Gemini正名&#xff0c;他们发现之前对Gemini的评估并不能完全捕捉到其真正的常识推理潜力。他们设计了需要跨模态整合常识知识的任…

net8 golang python性能比较

net8正式版出来两个月&#xff0c;现在性能到底如何呢&#xff0c;做个简单的例子和其他语言比较一下&#xff0c;测试内容是查找1000000以内的质数&#xff0c;代码不多&#xff0c;但包含了循环计算和Math库函数调用&#xff0c;直观的看一下语言之间差距是多少&#xff0c;心…

Strict MIME type checking is enforced for module scripts per HTML spec.

目录 前言错误信息如下:前言 最近使用docker打包Nginx和vue 为镜像文件,启动镜像时报错 错误信息如下: index89886.js:1 Failed to load module script: Expected a JavaScript module script but the server responded with a MIME type of "text/html". Stri…

详细解读QLC SSD无效编程问题-3

数据块大小Block Size对无效编程&#xff08;Invalid Programming&#xff09;比率的影响。研究范围内Block Size大小从128 Pages到2048 Pages不等。实验结果显示&#xff0c;随着块大小的增加&#xff0c;无效比率也呈现上升趋势&#xff0c;但增长速率较小。 这种现象的原因…

【visio绘图教程】8分钟教你Visio绘图,Visio绘图使用示例:基本框图

visio安装教程 新建 使用基本框图或者他给的模板 作图 首先在视图勾选网格 不想要自带的样式 不想要颜色 在填充这里选择无填充 不想要阴影在效果里面选 写文字 点击文本 复制可以使用ctrlD 连线 然后在线条里给他一个箭头 或者我们在这里直接使用连接线 然后复…

OpenHarmony—开发环境搭建

背景 因为没有实体的开发硬件&#xff0c;且不想破坏原有的Linux环境&#xff0c;所以这里基于 Docker QEMU 搭建开发环境 宿主机Linux系统命令行方式DockerQEMU 6.2 Docker环境准备 安装Docker 在Ubuntu中&#xff0c;可以使用下面的命令来安装Docker&#xff1a; sudo …

25计算机考研经验贴之准备篇二

Hello各位小伙伴&#xff0c;今天要分享的是 &#xff08;1&#xff09;报班or自学 &#xff08;2&#xff09;考研老师 &#xff08;3&#xff09;网购平台 &#xff08;4&#xff09;平板 【报班or自学】 关于这个问题网友的意见大致分为两类&#xff1a; 一类认为没必要报…

CMake入门教程【核心篇】属性管理set_property和get_property

&#x1f608;「CSDN主页」&#xff1a;传送门 &#x1f608;「Bilibil首页」&#xff1a;传送门 &#x1f608;「本文的内容」&#xff1a;CMake入门教程 &#x1f608;「动动你的小手」&#xff1a;点赞&#x1f44d;收藏⭐️评论&#x1f4dd; 文章目录 1.概述2.设置属性 - …

windows连接ssh并实现上传下载文件

连接ssh 输入&#xff1a;ssh空格用户名ip地址&#xff0c;然后按Enter 有可能出现下图提示&#xff0c;输入yes 回车即可 输入 password &#xff0c;注意密码是不显示的&#xff0c;输入完&#xff0c;再按回车就行了 以上是端口默认22情况下ssh连接&#xff0c;有些公司它…