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.mzph.cn/news/598897.shtml

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

相关文章

IDAPython详细版(二)

六&#xff1a;操作数 可以使用idc.get_openrand_typed(ea,n)得到操作数的类型。ea是地址&#xff0c;n是索引 这里有8种不同类型的操作数类 0_void 如果一个指令木有任何操作数它将返回0 0_reg 如果一个操作数是一个普通的寄存器将返回此类型。这个值在内部表示为1. o_mem …

java: 写入数据到HBase

一、添加依赖 <dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-client</artifactId><version>2.6.0</version></dependency><dependency><groupId>org.apache.hbase</groupId><art…

Prometheus-Alertmanage钉钉实现告警

获取钉钉的webhook地址 1、注册企业钉钉 a、注册企业钉钉 浏览器打开钉钉注册页面 填入手机号码&#xff0c;填入获取到的验证码&#xff0c;点注册 填入企业资料并注册 注册成功后&#xff0c;扫描二维码下载钉钉&#xff0c;如下图&#xff1a; b、添加机器人 管理后台 因…

Modbus RTU Learn

一、传输方式 采用主从应答方式进行 帧格式 功能码对应寄存器 演示01功能码 返回数据 0F 转换成二进制 02功能码 0F 转换成二进制 03功能码 读两个寄存器 04功能码 返回数据&#xff0c;读两个寄存器 05功能码 06功能码 10功能码 响应报文

在centos上安装WordPress 及创建配置文件无反应的解决方案

一、安装Apache服务 1.直接在命令行中输入以下命令即可,顺便安装编译组件&#xff1a; yum install -y httpd yum install -y httpd-devel2.启动Apache服务和设置Apache自启&#xff1a; 1 systemctl start httpd 2 systemctl enable httpd 3.添加一个测试页面&#xff0c;…

windows安装kafka以及kafka管理工具推荐

windows安装 1.下载地址 下载地址 下载最新版本的.tgz文件解压 2.修改配置 修改config目录下的zookeeper.properties中的dataDir属性 server.properties文件中的log.dir属性 3.启动zookeeper 进入到bin\windows\下的用cmd输入zookeeper-server-start.bat ..\..\config\zo…

5款实用的Win10软件,提高工作效率

​ 大家好&#xff0c;今天我来给大家推荐5款实用的Win10软件&#xff0c;它们可以帮助你提高工作效率&#xff0c;优化系统性能。 1.视频剪辑——DaVinciResolve ​ DaVinciResolve是一款集视频剪辑、调色、特效和音频后期制作于一体的专业软件。它拥有强大的图像处理技术&a…

Minitab 18安装包下载及安装教程

Minitab 18下载链接&#xff1a;https://docs.qq.com/doc/DUnRSaml6UHRpWFdn 1.选中下载好的安装包&#xff0c;鼠标右键解压到”Minitab 18“文件夹 2.选中”f4-mini181-setup.exe“&#xff0c;鼠标右击选择“以管理员身份运行” 3.点击“确定” 4.点击“下一步” 5.勾选我接…

android 分享文件

1.在AndroidManifest.xml 中配置 FileProvider <providerandroid:name"android.support.v4.content.FileProvider"android:authorities"com.example.caliv.ffyy.fileProvider"android:exported"false"android:grantUriPermissions"true…

宝宝的听力发育进程

小宝宝听力发育进程&#xff1a; 在母亲怀孕中晚期&#xff0c;小宝宝就有了听觉&#xff1a;6个月胎儿的听力已经和成年人相当了。 ◆ 出生0-7天的小宝宝会随声音变化产生不同反应&#xff0c;当在宝宝耳边拍巴掌或摇摇铃&#xff0c;宝宝可能会有惊跳反应&#xff0c;或吓哭…

查询json数组

步骤一&#xff1a;创建表格 首先&#xff0c;我们需要创建一个表格来存储包含JSON对象数组的数据。可以使用以下代码创建一个名为 my_table 的表格&#xff1a; CREATE TABLE my_table (id INT PRIMARY KEY AUTO_INCREMENT,json_data JSON ); 上述代码创建了一个包含两个列的…

SCADE—产品级安全关键系统的MBD开发套件

产品概述 随着新能源三电、智能驾驶等新技术的应用&#xff0c;汽车中衍生出很多安全关键零部件&#xff0c;如BMS、VCU、MCU、ADAS等&#xff0c;相应的软件在汽车中的比重越来越大&#xff0c;并且安全性、可靠性要求也越来越高。ANSYS主要针对安全关键零部件的嵌入式产品级软…

stable diffusion 基础教程-提示词之艺术风格用法

展现夕阳 golden hour, (rim lighting):1.2, warm tones, sun flare, soft shadows, vibrant colors, hazy glow, painterly effect, dreamy atmosphere阴影 chiaroscuro, (high contrast):1.2, dramatic shadows, bold highlights, moody atmosphere, captivating inte…

【六大排序详解】终篇 :冒泡排序 与 快速排序

终篇 :冒泡排序 与 快速排序 1 冒泡排序1.1 冒泡排序原理1.2 排序步骤1.3 代码实现 2 快速排序2.1 快速排序原理2.1.1 Hoare版本代码实现 2.1.2 hole版本代码实现 2.1.3 前后指针法代码实现 2.1.4 注意取中位数局部优化 2.1.5 非递归版本非递归原理代码实现 2.2 特性总结 谢谢阅…

室内效果图没有质感?外国大神这6个实用技巧,带你轻松掌握!

为了创作出高级有质感的效果图&#xff0c;我们需要注意构图、颜色、布光等多种因素&#xff0c;以打造出逼真的渲染效果。不过不要担心&#xff01;今天小编带来了国外知名设计师Arch Viz Artist在油管上分享的6个实用小技巧。看完带你轻松提升室内效果图的表现力&#xff01;…

WPS/PPT插件-大珩助手免费功能更新-特殊字符

扩展特殊格式下特殊字符&#xff0c;增加200多个常用特殊字符&#xff0c;可直接点击插入。 PPT大珩助手 1.7.6 1、提供素材库功能&#xff0c;可实现一键保存素材&#xff0c;支持对选中的形状&#xff0c;支持一键替换素材&#xff0c;保留原素材的尺寸和位置&#xff0c;…

RTT打印时间戳

官方的RTT VIEWER没有打印接收时间戳的功能&#xff0c;经过查找后发现可以有以下三种打印时间戳的方法。 第三方的RTT上位机ExtraPutty自己打印 第三方的RTT上位机 码云上有一个RTT_T2的仓库&#xff0c;基于python qt包写的画面&#xff0c;通过pylink来jlink通信。 优点…

Nginx 负载均衡集群 节点健康检查

前言 正常情况下&#xff0c;nginx 做反向代理负载均衡的话&#xff0c;如果后端节点服务器宕掉的话&#xff0c;nginx 默认是不能把这台服务器踢出 upstream 负载集群的&#xff0c;所以还会有请求转发到后端的这台服务器上面&#xff0c;这样势必造成网站访问故障 注&#x…

Linux GDB 调试

文章目录 一、Qemu二、Gdbvscode 调试 三、RootFs 一、Qemu qemu 虚拟机 Linux内核学习 Linux 内核调试 一&#xff1a;概述 Linux 内核调试 二&#xff1a;ubuntu20.04安装qemu Linux 内核调试 三&#xff1a;《QEMU ARM guest support》翻译 Linux 内核调试 四&#xff1a;…

基于SSM框架和Layui框架的管理系统

计算机毕业设计&#xff1a;打造安全、高效的信息管理系统在这个数字化时代&#xff0c;信息安全和高效管理是至关重要的。为了帮助学校或机构更好地管理和保护信息&#xff0c;我们为您设计了一套功能强大的信息管理系统。该系统利用先进的技术&#xff0c;结合MD5加密&#x…