IO进程线程Day4

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

#include <myhead.h>
//使用三个进程完成两个文件的拷贝工作
//两个子进程分别拷贝文件的上下两部分
//父进程回收资源

int main(int argc, const char *argv[])
{
	//判断外部传参
	if(argc!=3)
	{
		printf("input file error\n");
		printf("usage: ./a.out inputfile outfile\n");
		return -1;
	}

	int srcfd=-1,dstfd=-1,fd=-1;
	char buf[10]="";

	//计算文件中间的位置
	if((fd=open(argv[1],O_RDONLY))==-1)
	{
		perror("open file error");
		return -1;
	}
	int pos=lseek(srcfd,0,SEEK_END)/2;

	//创建第一个子进程
	pid_t pid1=-1;
	pid1=fork();

	if(pid1 == 0)  
	{
		printf("我是老大,我来拷贝上半部分\n");
		//打开源文件
		if((srcfd=open(argv[1],O_RDONLY))==-1)
		{
			perror("1 open srcfile error");
			return -1;
		}
		//打开目标文件
		if((dstfd=open(argv[2],O_WRONLY|O_CREAT|O_TRUNC,0664))==-1)
		{
			perror("1 open dstfile error");
			return -1;
		}
		//拷贝
		int count=0;
		while(1)
		{
			memset(buf,0,sizeof(buf));
			int res=read(srcfd,buf,sizeof(buf));
			write(dstfd,buf,res);
			count+=res;
			if(count>=pos)
			{
				break;
			}
		}
			//关闭
			close(srcfd);close(dstfd);
			printf("上半部分拷贝完成\n");
			exit(EXIT_SUCCESS);
		
	}else if(pid1 > 0)
	{
		//创建第二个子进程
		pid_t pid2=fork();
		if(pid2 == 0)
		{
			printf("我是老二,我来拷贝下半部分\n");
			//打开源文件
			if((srcfd=open(argv[1],O_RDONLY))==-1)
			{
				perror("2 open srcfile error");
				return -1;
			}
			//打开目标文件
			if((dstfd=open(argv[2],O_WRONLY|O_CREAT|O_TRUNC,0664))==-1)
			{
				perror("2 open dstfile error");
				return -1;
			}
			//偏移光标
			lseek(srcfd,pos,SEEK_SET);

			//拷贝
			while(1)
			{
				memset(buf,0,sizeof(buf));
				int res=read(srcfd,buf,sizeof(buf));
				write(dstfd,buf,res);
				if(res==0)
					break;
			}
			//关闭
			close(srcfd);close(dstfd);
			printf("下半部分拷贝完成\n");
			sleep(3);
			exit(EXIT_SUCCESS);
		}else if(pid2 > 0)
		{
			printf("我是父进程\n");
			sleep(5);
			wait(NULL);
			printf("回收一个子进程\n");
			wait(NULL);
			printf("回收一个子进程\n");
		}else
		{
			perror("fork2 error");
			return -1;
		}
	}else
	{
		perror("fork1 error");
		return -1;
	}
	return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基础知识:晶振的驱动功率测量方法

驱动功率 驱动功率是指振荡电路工作时晶体谐振器的功耗。 保持晶体谐振器低于驱动功率是很重要的。超过驱动功率&#xff0c;可能会引起频率和等效串联电阻的意外变化。 按如下方法计算驱动功率 : 驱动功率 I &#xff65;R1 I&#xff1a;驱动功率 [有效值] R1&#xff1a…

【Mybatis系列】Mybatis判断问题

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

简单的MySQL高可用还不快来学

MHA高可用 传统的MySQL主从架构会存在单点故障问题 MySQL集群高可用方案 单主&#xff1a;keepalived MHA MMM 多主&#xff1a;MySQL cluster PXC 1 MHA 1.1 MHA简介 MHA&#xff08;Master High Availability Manager and tools for MySQL&#xff09;目前在MySQL高可…

Focal Loss

1、样本不均衡的 问题 与 方案 Focal loss 用于解决上述 样本不均衡的问题 : \quad 1、正负样本数量不均衡 \quad 2、易分类的样本和难分类的样本数量不均衡

【Linux】常用的基本命令指令②

前言&#xff1a;前面我们学习了Linux的部分指令&#xff0c;今天我们将接着上次的部分继续将Linux剩余的基本指令. &#x1f496; 博主CSDN主页:卫卫卫的个人主页 &#x1f49e; &#x1f449; 专栏分类:Linux的学习 &#x1f448; &#x1f4af;代码仓库:卫卫周大胖的学习日记…

基于gamma矫正的照片亮度调整(python和opencv实现)

import cv2 import numpy as npdef adjust_gamma(image, gamma1.0):invGamma 1.0 / gammatable np.array([((i / 255.0) ** invGamma) * 255 for i in np.arange(0, 256)]).astype("uint8")return cv2.LUT(image, table)# 读取图像 original cv2.imread("tes…

使用qtquick调用python程序

一. 内容简介 使用qtquick调用python程序 二. 软件环境 2.1vsCode 2.2Anaconda version: conda 22.9.0 2.3pytorch 安装pytorch(http://t.csdnimg.cn/GVP23) 2.4QT 5.14.1 新版QT6.4,&#xff0c;6.5在线安装经常失败&#xff0c;而5.9版本又无法编译64位程序&#xf…

【算法】递归算法理解(持续更新)

这里写目录标题 一、递归算法1、什么情况下可以使用递归&#xff1f;2、递归算法组成部分3、案例&#xff1a;求n的阶乘4、编写一个递归函数来计算列表包含的元素数。5、通过递归找到列表中最大的数字。6、通过递归的方式实现二分查找算法。 一、递归算法 递归&#xff08;Rec…

pytorch07:损失函数与优化器

目录 一、损失函数是什么二、常见的损失函数2.1 nn.CrossEntropyLoss交叉熵损失函数2.1.1 交叉熵的概念2.2.2 交叉熵代码实现2.2.3 加权重损失 2.2 nn.NLLLoss2.2.1 代码实现 2.3 nn.BCELoss2.3.1 代码实现 2.4 nn.BCEWithLogitsLoss2.4.1 代码实现 三、优化器Optimizer3.1 什么…

【Nodejs】基于node http模块的博客demo代码实现

目录 package.json www.js db.js app.js routes/blog.js controllers/blog.js mysql.js responseModel.js 无开发&#xff0c;不安全。 这个demo项目实现了用Promise异步处理http的GET和POST请求&#xff0c;通过mysql的api实现了博客增删改查功能&#xff0c;但因没有…

elementui loading自定义图标和字体样式

需求&#xff1a;页面是用了很多个loading&#xff0c;需要其中有一个字体大些&#xff08;具体到图标也一样的方法&#xff0c;换下类名就行&#xff09; 遇见的问题&#xff1a;改不好的话会影响其他的loading样式&#xff08;一起改变了&#xff09; 效果展示 改之前 改之…

公司图纸该怎么管理? 公司图纸管理的方案

公司图纸管理是一个重要的环节&#xff0c;涉及到图纸的存储、分类、检索和使用等方面。以下是一些建议&#xff0c;帮助你有效地管理公司图纸&#xff1a; 建立图纸管理制度&#xff1a;制定明确的图纸管理制度&#xff0c;包括图纸的存储、分类、检索和使用等方面的规定。确保…

Eclipse下安装GDB

主要参考资料&#xff1a; 链接: https://blog.csdn.net/u013609041/article/details/18967837 目录 简介Eclipse中安装和配置GDB错误 简介 Eclipse是一款开发软件。 GDB是一个调试软件&#xff0c;但是GDB通常是运行在linux下的&#xff0c;无法直接在windows下运行&#xff…

C++程序设计兼谈对象模型(侯捷)笔记

C程序设计兼谈对象模型&#xff08;侯捷) 这是C面向对象程序设计的续集笔记&#xff0c;仅供个人学习使用。如有侵权&#xff0c;请联系删除。 主要内容&#xff1a;涉及到模板中的类模板、函数模板、成员模板以及模板模板参数&#xff0c;后面包含对象模型中虚函数调用&…

python统计分析——直方图(df.hist)

使用dataframe.hist()或series.hist()函数绘制直方图 import numpy as np import pandas as pd from matplotlib import pyplot as plt.dfpd.DataFrame(data{type:[A,A,A,A,A,A,A,A,A,A,B,B,B,B,B,B,B,B,B,B],value:[2,3,3,4,4,4,4,5,5,6,5,6,6,7,7,7,7,8,8,9] }) serpd.Serie…

基于综合特征的细菌噬菌体宿主预测工具iPHoP (Integrated Phage HOst Prediction)的介绍以及使用方法详细流程

介绍 iPHoP&#xff08;Integrated Phage HOst Prediction&#xff09;是一种基于综合特征的细菌噬菌体宿主预测方法。它是通过整合基因组序列、蛋白质序列和宿主基因组信息来预测细菌噬菌体的宿主范围。 iPHoP的预测过程分为三个步骤&#xff1a;特征提取、特征选择和宿主预…

shell sshpass 主机交互 在另外一台主机上执行某个命令 批量管理主机 以及一些案例

目录 作用安装 sshpasssshpass 用法在远程主机执行某个命令 案例批量传输密匙批量拷贝文件批量修改密码 作用 就是用一台主机 控制另外一台主机免交互任务管理工具方便批量管理主机使用方法就是在ssh 前边加一个 sshpass 安装 sshpass # 安装 sshpass yum -y install sshpas…

晨控CK-GW08-EC与欧姆龙PLC工业EtherCAT协议通讯指南

晨控CK-GW08-EC与欧姆龙PLC工业EtherCAT协议通讯指南 晨控CK-GW08系列是一款支持标准工业通讯协议EtherCAT的网关控制器,方便用户集成到PLC等控制系统中。系统还集成了8路读写接口&#xff0c;用户可通过通信接口使用EtherCAT协议对8路读写接口所连接的读卡器进行相对独立的读…

<软考高项备考>《论文专题 - 48 范围管理(7) 》

8 收尾 8.1 经验教训 经验&#xff1a; 1、在规划范围管理的时候&#xff0c;对项目的复杂程度过于乐观&#xff0c;考虑的不够周详&#xff0c;制订的计划粒度过于粗糙 2、在收集需求前&#xff0c;没有对需求收集人员进行项目业务上的培训&#xff0c;导致需求收集人员与客…