IO进程线程day5作业

1、使用多线程完成两个文件的拷贝,第一个线程拷贝前一半,第二个线程拷贝后一半,主线程回收两个线程的资源

代码:

#include<myhead.h>


//定义文件拷贝函数
int copy_file(int start,int len)
{
	int srcfd,destfd;
	//以只读的形式打卡源文件
	if((srcfd=open("./picture.bmp",O_RDONLY))==-1)
	{
		perror("open srcfile error");
		return -1;
	}
	//以只写形式打开目标文件
	if((destfd=open("./cp.bmp",O_WRONLY|O_CREAT,0664))==-1)
	{
		perror("open destfile error");
		return -1;
	}
	//移动光标
	lseek(srcfd,start,SEEK_SET);
	lseek(destfd,start,SEEK_SET);

	//进行拷贝
	char buf[128]="";
	int sum=0;
	while(1)
	{
		int res=read(srcfd,buf,sizeof(buf));
		sum+=res;  //每次读写的数据量放入到sum中
			
		//判断读取进度
		if(sum>=len||res==0)
		{
			//写入最后一次内容
			write(destfd,buf,res-(sum-len));
			break;
		}
	//将数据放入目标文件
	write(destfd,buf,res);
	}
	
	//关闭文件
	close(srcfd);
	close(destfd);

	return 0;
}

//定义分支线程
void *task2(void *arg)
{

	//分支线程从中间进行复制
	copy_file((*(int *)arg)/2,(*(int *)arg)-(*(int *)arg)/2);
	pthread_exit(NULL);

}
void *task1(void *arg)
{

	//分支线程从头进行复制
	copy_file(0,(*(int *)arg)/2);
	pthread_exit(NULL);

}

int main(int argc, const char *argv[])
{

	//计算数据
	int fd=-1;
	if((fd=open("./picture.bmp",O_RDONLY))==-1)
	{
		perror("open error");
		return -1;
	}
	int len=lseek(fd,0,SEEK_END);
	close(fd);

	//创建分支线程
	pthread_t tid1;
	if(pthread_create(&tid1,NULL,task1,&len)!=0)
	{
		printf("tid1 creat error\n");
		return -1;
	}
	pthread_t tid2;
	if(pthread_create(&tid2,NULL,task2,&len)!=0)
	{
		printf("tid2 creat error\n");
		return -1;
	}
	

	//回收资源
	pthread_join(tid1,NULL);
	pthread_join(tid2,NULL);
	printf("copy success\n");
	return 0;
}

运行结果:

思维导图:

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

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

相关文章

MySQL 安装步骤

下载地址&#xff1a;https://downloads.mysql.com/archives/community/&#xff0c; 选择第二个 将下载的压缩包解压到自己想要放到的目录下&#xff08;路径中最好不要有中文&#xff09; 一、添加环境变量 环境变量里面有很多选项&#xff0c;这里我们只用到Path这个参数…

微信小程序错误----config is not defined

微信小程序出错 请求头发生错误 修改 options.header {// 为请求头对象添加 token 验证的 Authorization 字段Access-Token: token,platform: MP-WEIXIN,// 保留原有的 header...options.header,}

【Java程序员面试专栏 数据结构】四 高频面试算法题:哈希表

一轮的算法训练完成后,对相关的题目有了一个初步理解了,接下来进行专题训练,以下这些题目就是汇总的高频题目,一个O(1)查找的利器哈希表,所以放到一篇Blog中集中练习 题目关键字解题思路时间空间两数之和辅助哈希使用map存储出现过的值,key为值大小,value为下标位置,…

Vue+SpringBoot打造超市商品管理系统

目录 一、摘要1.1 简介1.2 项目录屏 二、研究内容2.1 数据中心模块2.2 超市区域模块2.3 超市货架模块2.4 商品类型模块2.5 商品档案模块 三、系统设计3.1 用例图3.2 时序图3.3 类图3.4 E-R图 四、系统实现4.1 登录4.2 注册4.3 主页4.4 超市区域管理4.5 超市货架管理4.6 商品类型…

伦敦金行情分析需要学习吗?

对于伦敦金交易来说&#xff0c;目前大致分成两派&#xff0c;一派是实干派&#xff0c;认为做伦敦金交易重要的是实战&#xff0c;不需要学习太多东西&#xff0c;否则容易被理论知识所局限。另一派则是强调学习&#xff0c;没有理论知识&#xff0c;投资者很难做好伦敦金交易…

什么是接口测试?为什么要做接口测试?

1. 什么是接口测试&#xff1f;为什么要做接口测试&#xff1f; 接口测试是测试系统组件间接口的一种测试。接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。测试的重点是要检查数据的交换&#xff0c;传递和控制管理过程&#xff0c;以及系统间的相互…

Web自动化测试 Selenium 1/3

&#x1f525; 交流讨论&#xff1a;欢迎加入我们一起学习&#xff01; &#x1f525; 资源分享&#xff1a;耗时200小时精选的「软件测试」资料包 &#x1f525; 教程推荐&#xff1a;火遍全网的《软件测试》教程 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1…

Spring Framework

Spring Framework Spring 是一款开源的轻量级 Java 开发框架&#xff0c;旨在提高开发人员的开发效率以及系统的可维护性。 Spring 框架指的都是 Spring Framework&#xff0c;它是很多模块的集合&#xff0c;如下图所示&#xff1a; 一、Core Container Spring 框架的核心模…

Atcoder ABC341 B - Foreign Exchange

Foreign Exchange&#xff08;外汇&#xff09; 时间限制&#xff1a;2s 内存限制&#xff1a;1024MB 【原题地址】 所有图片源自Atcoder&#xff0c;题目译文源自脚本Atcoder Better! 点击此处跳转至原题 【问题描述】 【输入格式】 【输出格式】 【样例1】 【样例输入1…

【JavaEE】_form表单构造HTTP请求

目录 1. form表单的格式 1.1 form表单的常用属性 1.2 form表单的常用搭配标签&#xff1a;input 2. form表单构造GET请求实例 3. form表单构造POST请求实例 4. form表单构造法的缺陷 对于客户端浏览器&#xff0c;以下操作即构造了HTTP请求&#xff1a; 1. 直接在浏览器…

AcWing 2868. 子串分值(贡献法)

AcWing 2868. 子串分值 原题链接&#xff1a;https://www.acwing.com/problem/content/2871/ 具体分析过程如下图&#xff1a; 直接遍历的话太麻烦&#xff0c;且时间复杂度太高&#xff0c;所以另寻他路 字符串中只有小写字母26个&#xff0c;所以可以从此着手&#xff0c; …

Netty中的PooledByteBuf池化原理剖析

PooledByteBuf PooledByteBuf是池化的ByteBuf&#xff0c;提高了内存分配与释放的速度&#xff0c;它本身是一个抽象泛型类&#xff0c; 有三个子类:PooledDirectByteBuf、PooledHeapByteBuf、PooledUnsafeDirectByteBuf. Jemalloc算法 Netty的PooledByteBuf采用与jemalloc一…

java在当前项目创建文件

public static void main(String[] arge) throws IOException {File file new File("dade02\\dade");//不存在创建if(!file.exists()){file.mkdirs();}File file1 new File("dade02\\dade\\daade.txt");file1.createNewFile();}或者 public static void …

Rust ?运算符 Rust读写txt文件

一、Rust &#xff1f;运算符 &#xff1f;运算符&#xff1a;传播错误的一种快捷方式。 如果Result是Ok&#xff1a;Ok中的值就是表达式的结果&#xff0c;然后继续执行程序。 如果Result是Err&#xff1a;Err就是整个函数的返回值&#xff0c;就像使用了return &#xff…

租用海外服务器,自己部署ChatGPT-Next-Web,实现ChatGPT聊天自由,还可以分享给朋友用

前言 如果有好几个人需要使用ChatGPT&#xff0c;又没有魔法上网环境&#xff0c;最好就是自己搭建一个海外的服务器环境&#xff0c;然后很多人就可以同时直接用了。 大概是情况是要花80元租一个一年的海外服务器&#xff0c;花15元租一个一年的域名&#xff0c;然后openai 的…

搜索专项---DFS之连通性模型

文章目录 迷宫红与黑 一、迷宫OJ链接 本题思路:DFS直接搜即可。 #include <iostream> #include <cstring> #include <algorithm>constexpr int N110;int n; char g[N][N]; bool st[N][N]; int x1, y1, x2, y2;int dx[4] {-1, 0, 1, 0}, dy[4] {0, 1, 0, …

多线程完成文件拷贝:2024/2/21

作业1&#xff1a;使用多线程完成两个文件的拷贝 要求&#xff1a;第一个线程拷贝前一半&#xff0c;第二个线程拷贝后一半&#xff0c;主线程回收两个线程的资源 代码&#xff1a; #include <myhead.h>//定义结构体 typedef struct Info {char *src;char *dest;int s…

springboot访问webapp下的jsp页面

一&#xff0c;项目结构。 这是我的项目结构&#xff0c;jsp页面放在WEB-INF下的page目录下面。 二&#xff0c;file--->Project Structure,确保这两个地方都是正确的&#xff0c;确保Source Roots下面有webapp这个目录&#xff08;正常来说&#xff0c;应该本来就有&#…

c语言经典测试题1

1.题1 int x5,y7; void swap() { int z; zx; xy; yz; } int main() { int x3,y8; swap(); printf("%d,%d\n"&#xff0c;x, y); return 0; } A: 5,7 B: 7,5 C: 3,8 D: 8,3 大家思考一下选哪一个呢&#xff1f; 我们来分析一下&#xff1a;上述代码中我们创建了4…

【JavaWeb】网上蛋糕商城-项目搭建

学习目标 了解网上蛋糕商城的项目需求 了解网上蛋糕商城的功能结构 熟悉E-R图和数据表的设计 熟悉项目环境的搭建 通过前面章节的学习&#xff0c;相信读者应该已经掌握了Web开发的基础知识&#xff0c;学习这些基础知识就是为开发Web网站奠定基础。如今&#xff0c;电子商…