华清IOday5 24-8-1

news2025/4/15 13:08:37

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

#include <myhead.h>
//文件信息结构体创建
struct File
{
	const char *file1;//文件1地址
	const char *file2;//文件2地址
	int len;//文件1的大小
	int loge;//自定义文件标示,辅助程序执行
};
//获取文件长度
int GetFileLen(const char *argv1, const char *argv2)
{
	int src, dest;
	if ((src = open(argv1, O_RDONLY)) == -1)
	{
		perror("src error");
		return -1;
	}
	if ((dest = open(argv2, O_WRONLY | O_CREAT | O_TRUNC, 0664)) == -1)
	{
		perror("dest error");
		return -1;
	}
	int size = lseek(src, 0, SEEK_END);//获取文件大小
	close(src);
	close(dest);
	return size;
}
void *copy(void *argc)
{
	int src, dest;
	int len = ((struct File *)argc)->len;
	if ((src = open(((struct File *)argc)->file1, O_RDONLY)) == -1)//判断文件src是否打开成功
	{
		perror("src error");
		return NULL;
	}
	if ((dest = open(((struct File *)argc)->file2, O_WRONLY)) == -1)//判断文件dest是否打开成功
	{
		perror("dest error");
		return NULL;
	}
	int num = 0, count = 0;
	char buf[128];//定义搬运工
	int loge = ((struct File *)argc)->loge;//获取传递进来的线程的loge
	if (loge == 1)//判断如果是线程tid1执行这段
	{
		while (1)
		{
			count = read(src, buf, sizeof(buf));
			num += count;
			if (num > len / 2)
			{
				write(dest, buf, count - (num - len / 2));
				break;
			}
			write(dest, buf, count);
		}
	}
	else if(loge ==2)//判断如果是线程tid2执行这段
	{
		//光标偏移到文件一半的位置
		lseek(src, len / 2, SEEK_SET);
		lseek(dest, len / 2, SEEK_SET);
		while (1)
		{
			count = read(src, buf, sizeof(buf));
			if (count == 0)
			{
				break;
			}
			write(dest, buf, count);
		}
	}
	close(src);
	close(dest);
	pthread_exit(NULL);//关闭线程
}
int main(int argc, const char *argv[])
{
	pthread_t tid1, tid2;
	int len = GetFileLen(argv[1], argv[2]);//获取文件大小
	struct File file[2] = {{argv[1], argv[2], len, 1}, {argv[1], argv[2], len, 2}};//结构体的形式传递参数
	if (pthread_create(&tid1, NULL, copy, &file[0]) != 0)//判断线程tid1是否打开成功
	{
		printf("tid1 error\n");
		return -1;
	}
	if (pthread_create(&tid2, NULL, copy, &file[1]) != 0)//判断线程tid2是否打开成功
	{
		printf("tid2 error\n");
		return -1;
	}
	printf("%d\n", len);
	//回收线程
	pthread_join(tid1, NULL);
	pthread_join(tid2, NULL);
	return 0;
}

思维导图

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

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

相关文章

中文网址导航模版HaoWa1.3.1/模版网站wordpress导航主题

HaoWa v1.3.1由挖主题开发的一款网址导航类主题。 HaoWA主题除主体导航列表外&#xff0c;对主题所需的小模块都进行了开放式的HTML编辑器形式的功能配置&#xff0c;同时预留出默认的代码结构&#xff0c;方便大家在现有的代码结构上进行功能调整。 同时加入了字体图标Font …

一文解决3D车道线检测:最新单目3D车道线检测综述

前言 场景理解是自动驾驶中极具挑战的任务&#xff0c;尤其是车道检测。车道是道路分割的关键&#xff0c;对车辆安全高效行驶至关重要。车道检测技术能自动识别道路标记&#xff0c;对自动驾驶车辆至关重要&#xff0c;缺乏这项技术可能导致交通问题和事故。车道检测面临多种…

JS 逆向补环境

报错信息ReferenceError: window is not defined 看到此报错应该在env文件中写入一下代码 windowglobal报错信息Cannot read properties of undefined (reading ‘userAgent’) 看到此报错应该在env文件中写入一下代码 navigator{"userAgent":Mozilla/5.0 (Windo…

[GYCTF2020]Blacklist1

打开题目 判断注入类型&#xff0c;输入1试试 输入2 输入1 判断为字符型注入 堆叠查询2;show databases;# 然后来输入2; show tables;#来查看数据库的表 然后我们通过FlagHere表来查看列输入2;show columns from FlagHere;# 来查看列 、 重新构造payload&#xff1a;0;HAND…

手机在网状态接口如何对接?(二)

一、什么是手机在网状态&#xff1f; 传入手机号码&#xff0c;查询该手机号的在网状态&#xff0c;返回内容有正常使用、停机、在网但不可用、不在网&#xff08;销号/未启用/异常&#xff09;、预销户等多种状态。 二、手机在网状态使用场景&#xff1f; 1.用户验证与联系…

C语言数据在内存中的存储超详解

文章目录 1. 整数在内存中的存储2. 大小端字节序和字节序判断2. 1 什么是大小端&#xff1f;2. 2 为什么会有大小端&#xff1f;2. 3 练习 3. 浮点数在内存中的存储3. 1 一个代码3. 2 浮点数的存储3. 2. 1 浮点数存的过程3. 2. 2 浮点数取的过程3. 3 题目解析 1. 整数在内存中的…

vue大数据量列表渲染性能优化:虚拟滚动原理

前面咱完成了自定义JuanTree组件各种功能的实现。在数据量很大的情况下&#xff0c;我们讲了两种实现方式来提高渲染性能&#xff1a;前端分页和节点数据懒加载。 前端分页小节&#xff1a;Vue3扁平化Tree组件的前端分页实现 节点数据懒加载小节&#xff1a;Element Tree Plu…

镜像制作和管理

文章目录 一、Docker镜像说明Docker镜像中没有内核为什么没有内核容器中的程序后台运行会导致此容器启动后立即退出镜像的生命周期和制作方式 二、手动构建镜像基于容器手动制作镜像步骤实际操作基于 busybox 制作httpd镜像制作tomcat镜像基于ubuntu的基础镜像手动安装nginx镜像…

空间域注意力机制(Spatial Attention)

空间域注意力机制&#xff08;Spatial Attention&#xff09;是深度学习中一种重要的注意力机制&#xff0c;用于在处理如图像或视频数据时聚焦于特定区域&#xff0c;以提高模型的性能和效率。举例来说&#xff0c;首先&#xff0c;卷积神经网络处理一张图像&#xff0c;经过特…

【Docker】认识 Docker(版本、官方网站、架构、生态)

一、Docker 版本 Docker 发展过程中衍生了以下版本&#xff0c;目前我学习和使用提到的版本是 docker-ce。 1、lxc lxc 是最早的 linux 容器技术&#xff0c;早期版本的 docker 直接使用 lxc 来实现容器的底层功能。虽然使用者相对较少&#xff0c;但 lxc 项目仍在持续开发演…

理想发周榜,不是新能源市场的原罪

余华在他的小说《在细雨中呼喊》曾写过这么一段话&#xff1a; “仓廪实而知礼节&#xff0c;衣食足而知荣辱”&#xff0c;在物质需求得到满足以前&#xff0c;精神文明的发展难免会有所滞后。所以&#xff0c;贫穷&#xff0c;不是原罪。 同样的&#xff0c;在如今的新能源…

常见API(一)

API(Application Programming interface):应用程序编程接口&#xff0c;别人写好的程序&#xff0c;直接拿来调用。主要是为了灵活解决需求。这次只先简单学习了一下String和ArrayList两个。 1.包 包是分门别类管理程序的&#xff0c;类似于文件夹。别人写好的包通常都在别人的…

Android Studio2024安装教程

软件介绍 Android Studio 是谷歌推出的一个Android集成开发工具。 基于IntelliJ IDEA. 类似 Eclipse ADT&#xff0c;Android Studio 提供了集成的 Android 开发工具用于开发和调试。 软件下载 https://docs.qq.com/doc/DR0hWZ0l4aGtVTmVr软件安装 1、双击运行安装文件 2、…

双模幂运算Java

题目&#xff1a; 给你一个下标从 0 开始的二维数组 variables &#xff0c;其中 variables[i] [ai, bi, ci, mi]&#xff0c;以及一个整数 target 。 如果满足以下公式&#xff0c;则下标 i 是 好下标&#xff1a; 返回一个由 好下标 组成的数组&#xff0c;顺序不限 。 …

RK3568平台(触摸篇)双屏异触调试

一.现象 现象&#xff1a;准备两块主屏都接触摸框&#xff0c;A屏的HDMIOUT外接B屏的HDMIIN&#xff0c;用手触摸A屏&#xff0c;发现A屏没有触摸&#xff0c;A屏幕的触摸现象在B屏那边。 现要求&#xff1a;用手触摸A屏&#xff0c;A屏要有现象&#xff0c;不能现象在B屏那边…

《Transformer Scale Gate for Semantic Segmentation》CVPR2023

摘要 论文提出了一种名为Transformer Scale Gate&#xff08;TSG&#xff09;的模块&#xff0c;用于优化在语义分割任务中多尺度上下文信息的编码。现有的基于Transformer的分割模型在组合不同尺度的特征时没有进行选择&#xff0c;这可能导致次优尺度的特征降低分割的准确性…

【网络】UDP协议——传输层、端口号、UDP协议、UDP协议端格式、UDP的特点、UDP的缓冲区、UDP使用注意事项

文章目录 Linux网络1. 传输层1.1 端口号1.2 UDP协议1.2.1 UDP协议端格式1.2.2 UDP的特点1.2.3 UDP的缓冲区1.2.3 UDP使用注意事项1.2.5 基于UDP的应用层协议 Linux网络 1. 传输层 传输层&#xff1a;是 OSI 模型和 TCP/IP 模型中的重要层次&#xff0c;位于网络层之上、应用层…

推荐一个gpt镜像网站

包含现在主流的大语言模型 一个网站&#xff0c;各种模型随意切换和体验 集成多种功能 不止于对话&#xff0c;更有文生图&#xff0c;思维导图等多种功能 支持多个平台 除了网页版&#xff0c;更有安卓, mac os, ipad os等多个平台&#xff0c;随时随地方便同步和使用 …

【大模型】【智能体】agent导论

基本的图像 react&#xff1a; prompt&#xff1a;

营收保持增长,汽车之家掌握了什么“流量密码”?

从汽车之家新鲜出炉的“成绩单”来看&#xff0c;汽车行业的流量生意依然红火。 财报显示&#xff0c;2024年第二季度&#xff0c;汽车之家实现总营收18.7亿元&#xff0c;同比增长2.2%&#xff1b;经调整净利润5.72亿元&#xff0c;经调整净利润率达30.6%。其中&#xff0c;在…