1.4 day4 IO进程线程

使用两个子进程进行文件拷贝,父进程进行资源回收

#include <myhead.h>
int main(int argc, const char *argv[])
{//创建一个文件描述符并以只读的方式打开int fd=-1;if((fd=open("./test.bmp",O_RDONLY))==-1){perror("open error");return -1;}//使用lseek计算数据大小,确定数据的中心位置int len=(lseek(fd,0,SEEK_END))/2;close(fd);int pid=-1;int res;//将读取到的数据存入res中int sum=0;//计算已经读取了多少char buf[128]="";//定义一个存放数据的容器//创建一个子进程1,拷贝一半文件pid=fork();if(pid==0){//子进程//以只读的方式打开源文件,再以只写的方式打开目标文件int fd=-1;int cfd=-1;if((fd=open("./test.bmp",O_RDONLY))==-1){perror("open error");return -1;}if((cfd=open("./aa.bmp",O_WRONLY|O_CREAT,0664))==-1){perror("open error");return -1;}//将光标定位到相同位置lseek(fd,0,SEEK_SET);lseek(cfd,0,SEEK_SET);//循环将读取到的数据写入目标文件内while((res=read(fd,buf,sizeof(buf)))!=0){//计算已经读取了多少,如果读取到的数据等于或超过一半则退出循环sum+=res;if(sum>=len){write(cfd,buf,res-(sum-len));break;}write(cfd,buf,res);}//关闭文件描述,以及子进程1close(fd);close(cfd);exit(EXIT_SUCCESS);}else if(pid>0){//创建一个新的子进程2int pid2=-1;pid2=fork();if(pid2==0){//子进程2//重复子进程1的操作int fd=-1;int cfd=-1;if((fd=open("./test.bmp",O_RDONLY))==-1){perror("open error");return -1;}if((cfd=open("./aa.bmp",O_WRONLY|O_CREAT,0664))==-1){perror("open error");return -1;}//将两个文件的光标定位到中间-1的位置lseek(fd,len-1,SEEK_SET);lseek(cfd,len-1,SEEK_SET);while((res=read(fd,buf,sizeof(buf)))!=0){write(cfd,buf,res);}close(fd);close(cfd);exit(EXIT_SUCCESS);}else if(pid2>0){//父进程//阻塞回收子进程1和子进程2wait(NULL);wait(NULL);}else{perror("fork error");return -1;}printf("拷贝完成\n");}return 0;
}

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

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

相关文章

Pandas教程(五)—— 数据分组聚合及批处理

1.GroupBy机制 groupby分为三个步骤&#xff1a; 拆分-应用-合并 拆分操作是在特定轴向上进行的&#xff0c;dataframe可以在 行方向&#xff08;axis0&#xff09;/ 列方向 上分组分组后会产生groupby对象&#xff0c;我们就可以将函数应用在groupby对象的各个组中&#x…

Python基础入门第八课笔记(自定义函数 lambda)

什么时候用lambda表达式&#xff1f; 当函数有一个返回值&#xff0c;且只有一句代码&#xff0c;可以用lambda简写。 2、lanbda语法 lambda 形参 : 表达式 注意&#xff1a; 1、形参可以省略&#xff0c;函数的参数在lambda中也适用 2、lambda函数能接收任何数量的参数但只能…

LeetCode(38)外观数列⭐⭐

「外观数列」是一个整数序列&#xff0c;从数字 1 开始&#xff0c;序列中的每一项都是对前一项的描述。 你可以将其视作是由递归公式定义的数字字符串序列&#xff1a; countAndSay(1) "1"countAndSay(n) 是对 countAndSay(n-1) 的描述&#xff0c;然后转换成另一…

Element UI:时间组件,支持开始结束时间任选其一

一、背景 Element-UI中时间段组件el-date-picker&#xff0c;需要开始时间和结束时间都选择上&#xff0c;但是业务场景更多的是区间中可以只选择其中一个或开始时间和结束时间都选择 1.el-date-picker&#xff1a;开始时间与结束时间必须同时选择 2.业务需求&#xff1a;开…

计算机创新协会冬令营——暴力枚举题目06

我给大家第一阶段的最后一道题就到这里了&#xff0c;下次得过段时间了。所以这道题简单一点。但是足够经典 下述题目描述和示例均来自力扣&#xff1a;两数之和 题目描述 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target …

R2 + PicGo:教你搭建免费图床并实现快速上传和压缩图片

图片是网站中的重要元素&#xff0c;它们可以增加视觉效果&#xff0c;吸引读者的注意力&#xff0c;传达信息和情感。但是&#xff0c;图片也会占用很多的存储空间和流量&#xff0c;如果您使用传统的图床服务&#xff0c;可能会遇到以下问题&#xff1a;费用高昂、速度慢、容…

雨课堂作业整理2

第十九次作业 1.设 G G G 为无环图&#xff0c;如果把 G G G 的每条边都染上颜色&#xff0c;使得相邻的边的颜色不同&#xff0c;则这种染法为边着色。该说法&#xff08; &#xff09;。 A.正确 B.错误 2.设 G G G 如下图所示&#xff0c;则 G G G 是 3 3 3 边可着色的…

电商要怎么学?企业如何进行数字化转型打破市场僵局?

电商要怎么学&#xff1f;企业如何进行数字化转型打破市场僵局&#xff1f; 电商的学习需要从多个方面入手&#xff0c;首先需要了解电商的基本概念和原理&#xff0c;包括电商平台的运营模式、商品推广、客户服务等。此外&#xff0c;还需要掌握电商平台的操作技能&#xff0c…

[ABAP] 修改SAP网页端登录界面

文章目录 前言一、配置服务二、Class实现1. 创建类2. 重写方法 三、测试四、附 - 自动登录 前言 我们在SICF配置一些HTTP服务使用之后使用时&#xff0c;打开网页会提示输入账号密码&#xff0c;但是这个会以弹窗形式出现。 这对客户体验是很不友好的&#xff0c;这篇文章将会…

经典目标检测YOLO系列(一)YOLOV1的复现(1)总体架构

经典目标检测YOLO系列(一)实现YOLOV1网络(1)总体架构 实现原版的YOLOv1并没有多大的意义&#xff0c;因此&#xff0c;根据《YOLO目标检测》(ISBN:9787115627094)一书&#xff0c;在不脱离YOLOv1的大部分核心理念的前提下&#xff0c;重构一款较新的YOLOv1检测器&#xff0c;来…

web学习笔记(九)

目录 1.初识JS(JavaScript) 1.1什么是JavaScript&#xff1f; 1.2HTML5 CSS3 javaScript三者的关系 1.3 JAVAScript的作用 1.4JAVAScript的组成部分 1.5JS注释 1.6补充知识 2.JS的引入方法 2.1行内式 2.2嵌入式&#xff08;内嵌式&#xff09; 2.3外链式 3.输入和…

支持API文档生成,API管理工具:Apipost

随着数字化转型的加速&#xff0c;API&#xff08;应用程序接口&#xff09;已经成为企业间沟通和数据交换的关键。而在API开发和管理过程中&#xff0c;API文档、调试、Mock和测试的协作显得尤为重要。Apipost正是这样一款一体化协作平台&#xff0c;旨在解决这些问题&#xf…