linux c语言实现断点续传

#include <stdio.h>
#include <stdlib.h>

#define PACKAGE_SIZE (8)  // 定义包的大小为8字节
#define INPUT_FILENAME "example.txt" // 输入文件名
#define OUTPUT_FILENAME "output.txt" // 输出文件名

int main() {
    FILE *input_fp, *output_fp;
    int start_package = 2;  // 起始包的位置(从0开始计数)
    int num_packages, last_package_size;

    // 打开输入文件
    input_fp = fopen(INPUT_FILENAME, "rb");
    if (input_fp == NULL) {
        printf("无法打开输入文件\n");
        return 1;
    }

    // 获取输入文件大小
    fseek(input_fp, 0, SEEK_END);
    long file_size = ftell(input_fp);
    fseek(input_fp, 0, SEEK_SET);
    
    // 计算包数目和最后一个包的大小
    num_packages = file_size / PACKAGE_SIZE;
    last_package_size = file_size % PACKAGE_SIZE;

    // 打开输出文件以追加写入模式(如果存在),或新建文件
    output_fp = fopen(OUTPUT_FILENAME, "ab");
    if (output_fp == NULL) {
        output_fp = fopen(OUTPUT_FILENAME, "wb");
        if (output_fp == NULL) {
            printf("无法创建输出文件\n");
            fclose(input_fp);
            return 1;
        }
    }

    // 跳过指定位置之前的包
    fseek(input_fp, start_package * PACKAGE_SIZE, SEEK_SET);

    // 读取指定位置的包并写入输出文件
    for (int i = start_package; i < num_packages; i++) {
        char *buffer = (char *)malloc(PACKAGE_SIZE);
        fread(buffer, 1, PACKAGE_SIZE, input_fp);

        // 写入输出文件
        fwrite(buffer, 1, PACKAGE_SIZE, output_fp);

        free(buffer);
    }

    // 如果有最后一个包,继续读取并写入输出文件
    if (last_package_size > 0) {
        char *buffer = (char *)malloc(last_package_size);
        fread(buffer, 1, last_package_size, input_fp);

        // 写入输出文件
        fwrite(buffer, 1, last_package_size, output_fp);

        free(buffer);
    }

    // 关闭文件
    fclose(input_fp);
    fclose(output_fp);

    return 0;
}

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

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

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

相关文章

亚信安慧AntDB数据库:引领数据库标准与性能规范,推动行业创新

近日&#xff0c;全国信息技术标准化技术委员会数据库标准工作组在一场重要的研讨会上召开&#xff0c;旨在交流并总结2023年上半年数据库标准编制情况。我国自主研发的AntDB数据库&#xff0c;作为国内最早的国产数据库产品之一&#xff0c;受邀参与了此次标准的研讨&#xff…

Vue和React的运行时,校验引入包的上下文差异

背景 系统使用 webpack 5 模块联邦实现微前端&#xff0c;有关如何实现跨应用的代码共享&#xff0c;可参考 如何优雅的实现跨应用的代码共享 里的第三大点。 总之&#xff0c;这里是其他应用使用了某个应用共享出来的reg文件&#xff0c;引入方式为&#xff1a; import REG …

鸿蒙列表,item组件封装传参问题?@ObjectLink 和@Observerd

鸿蒙列表渲染&#xff0c;封装内容组件&#xff0c;进行item传参会报错&#xff1f; class FoodClass {order_id: number 0food_name: string ""food_price: number 0food_count: number 0 }Entry Component struct Demo07 {State message: string Hello World…

Java Web基础详解

回顾 之前的两篇的文章已经大概的带我们了解了tomcat的一些基本的操作&#xff0c;比如从零搭建我们自己的调试环境以及官方文档构建的方式&#xff0c;接下来的话&#xff0c;我将带大家来了解一下tomcat的一些基础知识&#xff0c;这些基础知识将以问题的方式抛出&#xff0…

精选50张网络监控拓扑图,都看懂了才算入门

你们好&#xff0c;我的网工朋友。 拓扑图说白了就是一种结构图&#xff0c;方便网工们直观看到网络中各个节点之间的链接&#xff0c;还有接口之间的链接&#xff0c;方便配置和排除错误。 根据结构不同&#xff0c;“网络拓扑图”分为星型拓扑结构、环型网络拓扑结构、总线…

Python实现API接口并发测试

目录 一、引言 二、准备工作 三、并发测试的实现 1、导入必要的库 2、定义并发测试函数 3、调用并发测试函数 四、测试结果分析和优化 五、总结 一、引言 随着微服务架构和RESTful API的普及&#xff0c;API接口测试变得越来越重要。并发测试是API测试的一个重要方面&…

Hadoop集群部署

目录 1 模板虚拟机环境准备 1.1 修改网卡配置文件 扩展 1.2 修改主机名 1.3 在虚拟机中需要的基础文件包 1.4 关闭防火墙 1.5 创建Hadoop的账户及文件 2 模板虚拟机安装JDK 3 模板虚拟机安装Hadoop 4 克隆虚拟机 5 虚拟机配置主机名称映射 6 集群分发脚本 7 SSH无…

蓝牙物联网通信网络设计方案

随着当前经济的快速发展&#xff0c;社会运行节奏加快&#xff0c;人们更倾向于选择高效的出行方式&#xff0c;而飞机就是其中之一。近年来&#xff0c;全国各地机场的吞吐量不断增长&#xff0c;导致航站楼面积过大&#xff0c;而 GPS全球定位系统在室内感测不到卫星信号无法…

嵌入式单片机的存储区域与堆和栈

一、单片机存储区域 如图所示位STM32F103ZET6的参数&#xff1a; 单片机的ROM&#xff08;内部FLASH&#xff09;&#xff1a;512KB&#xff0c;用来存放程序代码的空间。 单片机的RAM&#xff1a;64KB&#xff0c;一般都被分配为堆、栈、变量等的空间。 二、堆和栈的概念 …

配置Nginx出现403 (Forbidden)静态文件加载不出来

出现问题如图 出现此问题可能和索引文件缺失、访问限制等原因有关&#xff0c;在默认的Nginx的配置中&#xff0c;出现此问题的大概率问题可能出现在启动用户和nginx工作用户不一致所致。 Nginx的默认配置文件的 nginx.conf 里首行是 user www-data; 如果你是在 root 下启用…

【数学建模美赛M奖速成系列】Matplotlib绘图技巧(一)

Matplotlib图像基础 写在前面1 基本绘图实例&#xff1a;sin、cos函数图2 plot()函数详解**kwargs参数&#xff1a; 3 matplotlib中绘图的默认配置4 设置图的横纵坐标的上下界5 设置横纵坐标上的记号6 调整图像的脊柱7 添加图例8 给一些特殊点加注释9 子图最后 写在前面 前面我…

云上安全责任共担模型

对于传统自建物理服务器模式&#xff0c;用户需要承担所有的安全责任&#xff0c;负责从物理基础设施到上层应用的所有层面的安全体系构建。 云服务器的安全责任确实与物理服务器不同&#xff0c;云上的安全性是一种责任共担模式&#xff0c;其中云服务器ECS的安全责任需要你&…

Qt/C++音视频开发61-多屏渲染/一个解码渲染到多个窗口/画面实时同步

一、前言 多屏渲染就是一个解码线程对应多个渲染界面&#xff0c;通过addrender这种方式添加多个绘制窗体&#xff0c;我们经常可以在展会或者卖电视机的地方可以看到很多电视播放的同一个画面&#xff0c;原理应该类似&#xff0c;一个地方负责打开解码播放&#xff0c;将画面…

颗粒物PM2.5在建筑室外环境的污染扩散传播CFD模拟仿真

颗粒物PM2.5在建筑室外环境的污染扩散传播CFD模拟仿真 一、引言 随着城市化进程的加速,室外环境中的颗粒物污染问题日益严重。颗粒物在建筑室外环境中的扩散传播受到多种因素的影响,如风速、湍流、建筑物布局等。计算流体动力学(CFD)模拟作为一种有效的预测工具,可以模拟…

深度学习(九):bert之代码实现

bert之代码实现 任务1: Masked LM任务2&#xff1a;下一句预测代码实现预训练模型模型数据集配置训练评估预测 结果 任务1: Masked LM 即随机屏蔽&#xff08;masking&#xff09;部分输入token&#xff0c;然后只预测那些被屏蔽的token。在模型中&#xff0c;随机地屏蔽了每个…

代码随想录算法训练营Day9 | 20.有效的括号、1047.删除字符串中的所有相邻重复项、150.逆波兰表达式求值

LeetCode 20 有效的括号 本题思路&#xff1a;利用栈来完成&#xff0c;如果遇到左括号类型就放入栈&#xff0c;如果遇到右括号类型&#xff0c;就弹出栈顶的元素和该元素进行匹配&#xff0c;如果不匹配就返回 false。 注意点&#xff1a; 第一个就是右括号类型&#xff0c;那…

SQL数据工程师面试题20231226

1、数据库知识: 表一:Stock(商品库存入库表) 商品编号 入库数量 描述 A 300 A B 400 B C 200 C 注: Stock 表的商品编号是唯一主键。 表二: OutStock(商品库存出库表) 商品编号 出库数量 描述 A 100 A B 40 B B 50 B 注: outStock 表同一个商品存在多次出库。 – 创建 Stoc…

2023开发原子开放者大会:AI时代的前端开发,挑战与机遇并存

前言 12月16日&#xff0c;以“一切为了开发者”为主题的开放原子开发者大会在江苏省无锡市开幕。江苏省工业和信息化厅厅长朱爱勋、中国开源软件推进联盟主席陆首群等领导和专家参加开幕式&#xff0c;工业和信息化部信息技术发展司副司长王威伟、江苏省工业和信息化厅副厅长…

【力扣题解】P589-N叉树的前序遍历-Java题解

&#x1f468;‍&#x1f4bb;博客主页&#xff1a;花无缺 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! 本文由 花无缺 原创 收录于专栏 【力扣题解】 文章目录 【力扣题解】P589-N叉树的前序遍历&#x1f30f;题目描述&#x1f4a1;题解&#x1f30f;总结 【力…

张驰咨询:如何战胜实施精益生产培训的常见难题?

精益生产又称作“Lean Manufacturing”或“Lean Production”&#xff0c;它是一种强调消除生产过程中一切形式的浪费&#xff0c;注重流程优化以提升整体效能的管理哲学。源自丰田生产系统&#xff08;Toyota Production System&#xff09;&#xff0c;精益生产培训目标在于最…