华清远见作业第二十一天——IO(第四天)

思维导图:

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

代码:

#include<myhead.h>
int main(int argc, const char *argv[])
{if(argc!=3){printf("内容错误\n");return -1;}//定义字符搬运工char buf[100]="";//以只读的形式打开源文件FILE *rfp=NULL;if((rfp=fopen(argv[1],"r"))==NULL){perror("rfp error");return -1;}//使用fseek和ftell函数定位到文件的数量//fseek(文件指针,偏移量,开始的位置)//ftell(文件中指针),直接返回文件的位置,既把指针最后的位置,返回文件数量int num=0;    //计数	fseek(rfp,0,SEEK_END);	//光标偏移到文件最后的位置num=ftell(rfp);   //返回值就是文件的数量fseek(rfp,0,SEEK_SET);   //光标偏移到文件开头的位置//定义追加写的形式打开文件FILE *wfp=NULL;if((wfp=fopen(argv[2],"a"))==NULL){perror("wfp error");return -1;}pid_t pid1=-1;//创建一个子进程pid1=fork();if(pid1==0){printf("我是老大\n");printf("拷贝文档后部分内容\n");//定义追加写的形式打开文件FILE *wfp=NULL;if((wfp=fopen(argv[2],"a"))==NULL){perror("wfp error");return -1;}//bzero(清零的地址,空间字节数)//防止buf中有内容影响操作bzero(buf,sizeof(buf));	//清零buf//由于读文件已经打开,故需要把光标定位到开头fseek(rfp,num/2,SEEK_SET); //光标定位从开头偏移到num/2后面//由于需要限制位置,所以使用fread函数来进行读取int count=fread(buf,sizeof(buf[0]),num-num/2,rfp);//写入使用fwrite函数fwrite(buf,sizeof(buf[0]),count,wfp);//执行成功后关闭源文件以及被写入文件fclose(rfp);fclose(wfp);sleep(2);printf("拷贝文档后部分内容\n");//退出老大进程exit(EXIT_SUCCESS);}else if(pid1>0){//创建一个子进程pid_t pid2=fork();if(pid2==0){printf("我是老二\n");printf("拷贝文档前一部分内容\n");//定义追加写的形式打开文件FILE *wfp=NULL;if((wfp=fopen(argv[2],"a"))==NULL){perror("wfp error");return -1;}//bzero(清零的地址,空间字节数)//防止buf中有内容影响操作bzero(buf,sizeof(buf));	//清零buf//由于读文件已经打开,故需要把光标定位到开头fseek(rfp,0,SEEK_SET); //光标定位开头//由于需要限制位置,所以使用fread函数来进行读取int count=fread(buf,sizeof(buf[0]),num/2,rfp);//写入使用fwrite函数fwrite(buf,sizeof(buf[0]),count,wfp);//关闭被写入文件fclose(wfp);sleep(5);printf("拷贝前一部分内容完成\n");//退出进程老二exit(EXIT_SUCCESS);}else if(pid2>0){printf("我是父进程,我来收回资源\n");printf("我是父进程,我的第一个子进程pid:%d,第二个为:\%d\n", pid1, pid2);wait(NULL);wait(NULL);printf("孩子都死了,不活了\n");}else{perror("fork error");return -1;}}else {perror("fork error");return -1;}return 0;
}

运行效果:

进程五种状态转换图

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用results.csv文件数据绘制mAP对比图

yolov5每次train完成&#xff08;如果没有中途退出&#xff09;都会在run目录下生成expX目录&#xff08;X代表生成结果次数 第一次训练完成生成exp0 第二次生成exp1…以此类推&#xff09;。expX目录下会保存训练生成的weights以及result.txt文件&#xff0c;其中weights是训练…

freeRTOS——队列集知识总结及实战

1队列集概念 可以在任务间传递不同数据类型的消息 作用&#xff1a;用于对多个队列或信号量进行“监听”&#xff0c;其中不管哪一个消息到来&#xff0c;都可让任务退出阻塞状态 2队列集API函数 1&#xff09;创建队列集 QueueSetHandle_t xQueueCreateSet( const UBaseType…

调用百度地图 API 的步骤详解

百度地图 Web 服务 API 为开发者提供 http/https 接口&#xff0c;即开发者通过 http/https 形式发起检索请求&#xff0c;获取返回 json 或 xml 格式的检索数据。用户可以基于此开发 JavaScript、C#、C、Java 等语言的地图应用。百度地图 API 在线地址为&#xff1a;baidumap.…

C#使用switch多路选择语句判断何为季节

目录 一、 switch语句 二、示例 三、生成 一、 switch语句 switch语句是多路选择语句&#xff0c;它通过一个表达式的值来使程序从多个分支中选取一个用于执行的分支。 switch表达式的值只可以是整型、字符串、枚举和布尔类型。 switch语句中多个case可以使用一个break。 在…

氢燃料电池——产品标准规范汇总和梳理

文章目录 氢燃料电池模块 氢燃料电池发动机 氢燃料电池汽车 加氢系统 总结 氢燃料电池模块 GB/T 33978-2017 道路车辆用质子交换膜燃料电池模块 GB/T 43361-2023 气体分析 道路车辆用质子交换膜燃料电池氢燃料分析方法的确认 GB/T 29729-2022 氢系统安全的基本要求 GB/T 4…

python报错:TypeError: Descriptors cannot be created directly.

问题 报错提示&#xff1a; TypeError&#xff1a;不能直接创建描述符。 如果此调用来自 _pb2.py 文件&#xff0c;则您生成的代码已过期&#xff0c;必须使用 protoc > 3.19.0 重新生成。 如果您不能立即重新生成原型&#xff0c;其他一些可能的解决方法是&#xff1a; 1.…

(JAVA)-(网络编程)-初始网络编程

网络编程就是在通信协议下&#xff0c;不同的计算机上运行的程序&#xff0c;进行的数据传输。 讲的通俗一点&#xff0c;就是以前我们写的代码是单机版的&#xff0c;网络编程就是联机版的。 应用场景&#xff1a;即时通信&#xff0c;网游对战&#xff0c;金融证券&#xf…

C之BS开发

一、 BS 概述与 boa 搭建 1.1 BS 模式开发概述 BS 模式&#xff1a; 浏览器与服务器模式&#xff0c; 即通过浏览器访问服务器的 Web 资源。 1.1.1 web 前端开发技术 主要包含&#xff1a; HTML 、 CSS 、 XML/JSON 、 Javascript 、 AJAX HTML 超文本标记语言 ( 英文全称…

IDEA+SpringBoot项目下静态资源访问路径陷阱:静态资源访问404

IDEASpringBoot项目下静态资源访问路径陷阱&#xff1a;静态资源访问404 今天使用SpringBoot项目的时候遇到静态资源访问不到的问题——404。接下来就是这篇博客所说的问题了——>静态资源访问不到&#xff0c;404。 今天使用SpringBoot项目的时候遇到静态资源访问不到的问…

在Ubuntu22.04上部署Stable Diffusion

在AI绘画软件领域Stable-Diffusion&#xff08;简称SD&#xff09;在开源领域绝对是不二之选&#xff0c;他的插件方式可以让此软件具有更多的功能&#xff0c;开发者社群为此提供了大量免费高质量的外接预训练模型&#xff08;fine-tune&#xff09;和插件&#xff0c;并持续维…

若依项目(ruoy-vue)多模块依赖情况简要分析

主pom文件关键点分析 properties标签声明变量信息&#xff1a;版本号、编码类型、java版本spring-boot依赖形式&#xff1a;spring-boot-dependencies、pom、importdependencies中添加本项目内部模块&#xff0c;同时在modules中声明模块packaging打包选择pom设置打包maven-co…

论文悦读(7)——NVM文件系统之Trio(SOSP‘23)文件系统

TRIO&#xff08;SOSP23&#xff09; 1. 背景&#xff08;Background&#xff09;1.1 NVM Technologis1.2 File System Customization1.3 Userspace NVM File Systems 2. 观察与动机&#xff08;Observation & Motivation&#xff09;3. 设计与实现&#xff08;Design &…