2024-2-21-多线程基础作业
作业:

源代码:
#include <myhead.h>
#define MAXSIZE 64
//定义要传递的结构体类型
struct Info
{const char *src;const char *dest;int len;
};
int get_file_len(const char *srcfile, const char *destfile)
{//以只读的形式打开源文件int srcfd, destfd;if ((srcfd = open(srcfile, O_RDONLY)) == -1){perror("open srcfile error");return -1;}//以只写创建的形式打开目标文件if ((destfd = open(destfile, O_WRONLY | O_CREAT | O_TRUNC, 0664)) == -1){perror("open destfile error");return -1;}//求源文件的大小int len = lseek(srcfd, 0, SEEK_END);//关闭两个文件close(srcfd);close(destfd);return len;
}
void copy_file(const char *srcfile, const char *destfile, int start, int len)
{int srcfd = -1, destfd = -1;//处理主线程中传过来的数据if ((srcfd = open(srcfile, O_RDONLY)) == -1){printf("open error\n");return;}if ((destfd = open(destfile, O_WRONLY | O_CREAT | O_TRUNC, 0664)) == -1){printf("open error\n");return;}lseek(srcfd, start, SEEK_SET);lseek(destfd, start, SEEK_SET);char buf[MAXSIZE] = "";int sum = 0;while (1){int res = read(srcfd, buf, sizeof(buf));sum += res; //将每次读取的数据放入sum中if (sum >= len || res - (sum - len)){write(destfd, buf, res - (sum - len)); //将最后一次的内容写入break;}//将读取的数据写入目标文件write(destfd, buf, res);close(srcfd);close(destfd);return;}
}//定义分支线线程1
void *task1(void *arg)
{struct Info buf = *((struct Info *)arg);copy_file(buf.src, buf.dest, 0, buf.len);
}void *task2(void *arg)
{//处理主线程中传过来的数据struct Info buf = *((struct Info *)arg);copy_file(buf.src, buf.dest, buf.len / 2, buf.len);
}int main(int argc, const char *argv[])
{// if (argc != 4)// {// printf("input file error\n");// printf("usage:./a.out srcfile destfile\n");// return -1;// }// int len = get_file_len(argv[3], argv[4]);// sleep(1);char *srcfile="./1.txt";char *destfile="./2.txt";int len = get_file_len(srcfile, destfile);//定义一个结构体变量struct Info buf = {srcfile, destfile, len};sleep(1);pthread_t tid1, tid2;//创建线程1if (pthread_create(&tid1, NULL, task1, &buf) != 0) //向分支线程传递一个数据{printf("tid create error\n");return -1;}//创建线程2if (pthread_create(&tid2, NULL, task2, &buf) != 0) //向分支线程传递一个数据{printf("tid create error\n");return -1;}//回收资源pthread_join(tid1, NULL);pthread_join(tid2, NULL);sleep(5);printf("拷贝成功\n");return 0;
}
效果图:

思维导图:

相关文章:
2024-2-21-多线程基础作业
作业: 源代码: #include <myhead.h> #define MAXSIZE 64 //定义要传递的结构体类型 struct Info {const char *src;const char *dest;int len; }; int get_file_len(const char *srcfile, const char *destfile) {//以只读的形式打开源文件int sr…...
MySQL8的ONLY_FULL_GROUP_BY SQL模式兼容问题
文章目录 1. 问题描述2. 解决方法1. 修改查询2. 修改SQL模式3. 使用ANY_VALUE()函数 1. 问题描述 Cause: java.sql.SQLSyntaxErrorException: Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column btc-cloud.t1.id which is not funct…...
Django使用Celery异步
安装包 pip install celerypip install eventlet 1.在项目文件的根目录下创建目录结果 2. 在main.py文件中 # !/usr/bin/env python # -*-coding:utf-8 -*-""" # Author :skyTree # version :python 3.11 # Description&#…...
vue3 + ts + echart 实现柱形图表
首先封装Echart一个文件 代码如下 <script setup lang"ts"> import { ECharts, EChartsOption, init } from echarts; import { ref, watch, onMounted, onBeforeUnmount } from vue;// 定义props interface Props {width?: string;height?: string;optio…...
c语言结构体与共用体
前面我们介绍了基本的数据类型 在c语言中 有一种特殊的数据类型 由程序员来定义类型 目录 一结构体 1.1概述 1.2定义结构体 1.3 结构体变量的初始化 1.4 访问结构体的成员 1.5结构体作为函数的参数 1.6指向结构的指针 1.7结构体大小的计算 二共用体 2.1概述 2.2 访…...
vue系列--vue封装拖拽指令v-drag
1.首先将下面的代码引入代码中 export const initVDrag (Vue) > {Vue.directive("drag", (el) > {const oDiv el // 当前元素const minTop oDiv.getAttribute("drag-min-top")const ifMoveSizeArea 20oDiv.onmousedown (e) > {let target …...
devc++ 使用 winsock 实现 UDP 局域网 WIFI 广播
参考链接 使用UDP发送广播报_udp广播 inaddr_broadcast-CSDN博客 UDP接收端收不到广播的消息问题排查_unity upd广播连接不上是什么情况-CSDN博客 如何禁用自己电脑的虚拟网卡-百度经验 (baidu.com) 但是wifi 会屏蔽255.255.255.255 广播地址,所以 255.255.255.2…...
JS实现根据数组对象的某一属性排序
JS实现根据数组对象的某一属性排序 一、冒泡排序(先了解冒泡排序机制)二、根据数组对象的某一属性排序(引用sort方法排序) 一、冒泡排序(先了解冒泡排序机制) 以从小到大排序为例,冒泡排序的原…...
CSP-J 2023 复赛第2题:公路 ← 贪心算法
【题目来源】https://www.luogu.com.cn/problem/P9749https://www.acwing.com/problem/content/5311/【题目描述】 小苞准备开着车沿着公路自驾。 公路上一共有 n 个站点,编号为从 1 到 n。 其中站点 i 与站点 i1 的距离为 vi 公里。 公路上每个站点都可以加油&…...
【LeetCode打卡】Day23|669. 修剪二叉搜索树、108.将有序数组转换为二叉搜索树、538.把二叉搜索树转换为累加树
学习目标: 669. 修剪二叉搜索树 108.将有序数组转换为二叉搜索树 538.把二叉搜索树转换为累加树 学习内容: 669. 修剪二叉搜索树 题目链接&&文章讲解 给你二叉搜索树的根节点 root ,同时给定最小边界low 和最大边界 high。通过修剪…...
Transformer位置表示(Position Encoding)
为什么需要位置表示 对比CNN、RNN和Self-Attention: CNN处理相邻窗口的内容;RNN天然是序列操作,考虑了位置先后关系;Self-Attention的计算时是无序的,所以需要位置表示来知道Token之间的位置信息。 绝对位置表示 典型如…...
LPDDR6与LPDDR5 State Diagram技术探讨
相对于LPDDR5: 1)去掉DSM 2)idle到per-bank-refresh变成per-2-bank-refresh,LPDDR6下可自由组合任两个bank刷新,以提高性能 3)sref到进入command bus training后可MRR、MRW、CAS、MPC等命令 4)idle power down期间可MRR、MRW、CAS、MPC等命令 5)idle到进入command bus train…...
AliLinux的使用Docker初始化服务(详细)
AliLinux的使用Docker初始化服务(详细) AliLinux是基于CentOS的。 1、java 环境 2、mysql环境 3、kafka环境 4、flink环境 5、dinky环境 这些环境,本想直接dnf安装在宿主机上,思来想去,还是用docker方便学习&…...
docker环境常用容器安装
目录 1.安装partainer 2.安装myql 3.安装redis 4.安装Minio 5.安装zibkin 6.安装nacos 7.安装RabbitMq 8.安装RocketMq 8.1启动service 8.2修改对应配置 8.3启动broker 8.4启动控制台 9.安装sentinel 10.安装elasticsearch 11.安装Kibana 12.安装logstash/file…...
【论文阅读|基于 YOLO 的红外小目标检测的逆向范例】
基于 YOLO 的红外小目标检测的逆向范例 摘要1 引言2 相关工作2.1 逆向推理2.2 物体检测方法 3 方法3.1 总体架构3.2 逆向标准的可微分积分 4 实验4.1 数据集和指标4.2 实验环境4.4 OL-NFA 为少样本环境带来稳健性 5 结论 论文题目: A Contrario Paradigm for YOLO-b…...
【presto权威指南】常用操作
shell ./bin/launcher start ./bin/launcher status ./bin/launcher stop /home/work/presto/bin/presto --server hadoop2:8443 --catalog hive --schema defult --debug --user ‘sdfyypt_2_0_eywa_admin’ //指定用户 presto -f 可以指定执行sql文件 presto -execute 可以…...
Python程序员面试准备:八股文题目与解答思路
目录 描述一下Python中的列表推导式(List Comprehension)及其用法。 代码示例: 解答思路: 解释一下Python中的装饰器(Decorator)及其作用。 代码示例: 输出: 解答思路: 谈谈Python中的GIL(Global Interprete…...
如何系统地自学Python?
如何系统地自学Python? 如何系统地自学Python?1.了解编程基础2.学习Python基础语法3.学习Python库和框架4.练习编写代码5.参与开源项目6.加入Python社区7.利用资源学习8.制定学习计划9.持之以恒总结 如何系统地自学Python? 作为一个Python语…...
mysql 2-21
约束的分类 添加约束 查看表约束 非空约束 唯一性约束 复合的唯一性约束 只要有一个字段不重复,就可以添加成功 主键约束 自增列 mysql 8.0具有持久化,重启服务器会继续自增 外键约束 创建外键 关联必须有唯一性约束,或者是主键 约束等级 …...
【C#】List泛型数据集如何循环移动,最后一位移动到第一位,以此类推
欢迎来到《小5讲堂》 大家好,我是全栈小5。 这是《C#》系列文章,每篇文章将以博主理解的角度展开讲解, 特别是针对知识点的概念进行叙说,大部分文章将会对这些概念进行实际例子验证,以此达到加深对知识点的理解和掌握。…...
驱动管理工具:释放磁盘空间的开源解决方案
驱动管理工具:释放磁盘空间的开源解决方案 【免费下载链接】DriverStoreExplorer Driver Store Explorer 项目地址: https://gitcode.com/gh_mirrors/dr/DriverStoreExplorer 当你的系统频繁弹出磁盘空间不足警告,而C盘又找不到明显的大文件时&am…...
大规模数据清洗效率提升300%的Polars 2.0实战方案(内存泄漏避坑全图谱)
第一章:Polars 2.0大规模数据清洗的范式跃迁 Polars 2.0 不再是 Pandas 的轻量替代品,而是一次面向现代硬件与真实数据工程场景的底层重构。其核心跃迁体现在三重解耦:计算图与执行引擎分离、内存布局与逻辑 Schema 解耦、以及 I/O 层与处理层…...
嵌入式开发中的静态代码分析工具实战指南
1. 嵌入式代码静态分析工具概述作为一名嵌入式开发工程师,我深知在资源受限的MCU环境中,代码质量直接决定了产品的稳定性和可靠性。传统的C语言编译器虽然能发现语法错误,但对代码设计缺陷和潜在风险往往无能为力。这正是静态代码分析工具的价…...
Intv_AI_MK11 服务端错误处理:全面应对 403 Forbidden 等常见 HTTP 状态码
Intv_AI_MK11 服务端错误处理:全面应对 403 Forbidden 等常见 HTTP 状态码 1. 为什么需要关注API错误处理 在调用Intv_AI_MK11这类AI服务API时,开发者经常会遇到各种HTTP状态码返回。这些状态码就像是服务端给你的"小纸条",告诉你…...
别再只用手动调参了!用ArcGIS的Geostatistical Analyst工具包自动优化克里金插值参数
解锁ArcGIS隐藏技能:用Geostatistical Analyst实现克里金插值参数智能优化 当你在深夜盯着屏幕上半变异函数模型的参数犹豫不决时,是否想过让软件替你做出更科学的选择?克里金插值作为地统计学的黄金标准,其精度高度依赖于半变异函…...
PyTorch 2.8镜像实操手册:Git+vim+htop+screen开发运维一体化工作流
PyTorch 2.8镜像实操手册:Gitvimhtopscreen开发运维一体化工作流 1. 镜像概述与环境准备 PyTorch 2.8深度学习镜像是一个为专业开发者打造的全功能工作环境,基于RTX 4090D 24GB显卡和CUDA 12.4进行了深度优化。这个镜像不仅预装了最新版的PyTorch框架&…...
万象视界灵坛保姆级教程:Bright-Pixel UI下上传图片+输入神谕标签全流程
万象视界灵坛保姆级教程:Bright-Pixel UI下上传图片输入神谕标签全流程 1. 教程概述 万象视界灵坛是一款基于OpenAI CLIP技术的高级多模态智能感知平台,通过独特的Bright-Pixel UI设计,将复杂的图像语义分析转化为直观有趣的交互体验。本教…...
AI论文生成工具推荐:7款高效平台(含爱毕业aibiye)支持自动排版与LaTeX智能匹配
工具快速对比排名(前7推荐) 工具名称 核心功能亮点 处理时间 适配平台 aibiye 学生/编辑双模式降AIGC 1分钟 知网、万方等 aicheck AI痕迹精准弱化查重一体 ~20分钟 知网、格子达、维普 askpaper AIGC率个位数优化 ~20分钟 高校检测规则通…...
STM32F4 Flash读写避坑指南:如何安全存储关键数据(附完整代码)
STM32F4 Flash读写避坑指南:如何安全存储关键数据(附完整代码) 第一次在STM32F4上操作Flash时,我遇到了一个令人抓狂的问题——设备运行几小时后数据莫名其妙丢失。经过三天三夜的调试才发现,原来是在写入前忘记检查扇…...
AI赋能开发:让快马平台智能生成基于contextmenumanager的动态条件式右键菜单代码
最近在做一个电商项目时,遇到了一个有趣的交互需求:需要为不同类型的商品卡片实现智能化的右键菜单。这个需求让我发现了InsCode(快马)平台的AI辅助开发功能特别实用,尤其是对于contextmenumanager这种需要动态逻辑的场景。 需求分析 页面上有…...
