C++系统编程篇——Linux第一个小程序--进度条
(1)先引入一个概念:行缓冲区
\r和\n
\r表示回车
\n表示回车并换行
①代码一
#include<stdio.h>
#include<unistd.h>
int main()
{printf("hello Makefile!\n");sleep(3);return 0;
}

打印出了hello Makefile!,然后三秒后结束了运行
②代码二
#include<stdio.h>
#include<unistd.h>
int main()
{printf("hello Makefile!");sleep(3);return 0;
}


什么也没显示,程序结束后打印出了hello Makefile!,同时在同一行出现了命令提示符
③代码三
#include<stdio.h>
#include<unistd.h>
int main()
{printf("hello Makefile!");fflush(stdout);sleep(3);return 0;
}


打印出了hello Makefile!,然后三秒后结束了运行,同时在同一行出现了命令提示符
这是因为 printf("hello Makefile!"); 没有包含换行符,缓冲区的内容不会立即被刷新
printf 会先将数据写入到一个缓冲区中,只有在遇到换行符(\n),缓冲区满了,或者程序正常结束时,缓冲区的内容才会被真正输出到终端。
(2)进度条项目
根据上述特性,可以写出进度条,用字符#表示进度,打印出以后进行回车不换行,每次多加一个#,就能够实现进度条在加载的效果,而每次变更打印的内容为数字的话,就可以有进度在变更的效果。
<Processbar.h>
#pragma once#include<stdio.h>
typedef void(*callback_t)(double,double); void ProcBar(double total,double current);
<Processbar.c>
#include"Processbar.h"
#include<string.h>
#include<unistd.h>
#define length 101
#define Style '#'// version 1
const char *lable = "|/-\\";
//void ProcBar()
//{
// char bar[length];
// memset(bar,'\0',sizeof(bar));
//
// int len = strlen(lable);
// int cnt = 0;
// while(cnt <= 100)
// {
// printf("[%-100s][%3d%%][%c]\r",bar,cnt,lable[cnt%len]);
// fflush(stdout);
// bar[cnt++] = Style;
// usleep(60000);
// }
// printf("\n");
//
//}
//// version 2
void ProcBar(double total,double current)
{char bar[length];memset(bar,'\0',sizeof(bar));int len = strlen(lable);double rate = (current*100.0)/total;int cnt = 0;int loop_count = (int)rate;while(cnt <= loop_count){bar[cnt++] = Style;//usleep(10000);}printf("[%-100s][%.1lf%%][%c]\r",bar,rate,lable[cnt%len]);fflush(stdout);
}
<Main.c>
#include"Processbar.h"
#include<stdio.h>
#include<unistd.h>
//downloadvoid download(double filesize,callback_t cb)
{double current = 0.0;//已下载量double bandwidth = 1024*1024*1.0;//带宽printf("download begin, current:%lf\n",current);while(current<=filesize){cb(filesize,current);//从网络中获取数据current+=bandwidth;usleep(100000);} printf("\ndownload done, filesize:%.3lf\n",filesize);
}
int main()
{download(100*1024*1024,ProcBar);download(2*1024*1024,ProcBar);download(200*1024*1024,ProcBar);download(400*1024*1024,ProcBar);download(50*1024*1024,ProcBar);//ForTest();// ProcBar(100.0,56.9);// ProcBar(100.0,1.0);// ProcBar(100.0,99.9);// ProcBar(100.0,100);// return 0;
}

相关文章:
C++系统编程篇——Linux第一个小程序--进度条
(1)先引入一个概念:行缓冲区 \r和\n \r表示回车 \n表示回车并换行 ①代码一 #include<stdio.h> #include<unistd.h> int main()…...
一个中文和越南语双语版本的助贷平台开源源码
一个中文和越南语双语版本的助贷平台开源源码。后台试nodejs。 后台 代理 前端均为vue源码,前端有中文和越南语。 前端ui黄色大气,逻辑操作简单,注册可对接国际短信,可不对接。 用户注册进去填写资料,后台审批&…...
【游戏引擎之路】登神长阶(五)
5月20日-6月4日:攻克2D物理引擎。 6月4日-6月13日:攻克《3D数学基础》。 6月13日-6月20日:攻克《3D图形教程》。 6月21日-6月22日:攻克《Raycasting游戏教程》。 6月23日-6月30日:攻克《Windows游戏编程大师技巧》。 …...
FireAct:使用智能体(agent)微调大语言模型
1.概述 近年来,针对语言模型(LMs)的研究致力于探索其与外部工具或环境互动的能力,以推进新型语言代理的发展。此类代理具备从环境反馈中汲取新知识、通过语言推理进行连续决策,以及借助自我反思提升任务解决能力的能力。工业界的进展,如ChatGPT插件,凸显了语言代理在实际…...
20240626让飞凌的OK3588-C开发板在相机使用1080p60分辨率下预览
20240626让飞凌的OK3588-C开发板在相机使用1080p60分辨率下预览 2024/6/26 15:15 4.2.1 全编译测试 在源码路径内,提供了编译脚本 build.sh,运行该脚本对整个源码进行编译,需要在终端切换到解压 出来的源码路径,找到 build.sh 文件…...
python数据分析——数据分类汇总与统计
数据分类汇总与统计 前言一、Groupby分类统计语法按列分组示例一示例二示例三 遍历各分组示例 使用字典和Series分组示例 使用函数分组示例 二、数据聚合groupby的聚合函数示例一示例二 逐列及多函数应用示例一示例二 返回不含行索引的聚合数据示例 三、一般性的“拆分-应用-合…...
iOS17系统适配
iOS17 新功能 文章目录 iOS17 新功能iOS17支持哪几款机型Xcode15新特性iOS17-开发适配指南 横屏待机 在iOS 17中,还带来了横屏待机功能,苹果将这个新功能命名为“Standby”模式,为 iPhone 带来了全新的玩法。iPhone启用之后,默认情…...
树洞陪聊陪玩交友程序系统源码,解锁交友新体验
在繁忙的都市生活中,你是否渴望找到一片属于自己的秘密花园,倾诉心声、分享快乐?今天,就让我带你走进这片名为“树洞”的神秘之地,感受陪聊陪玩交友的全新魅力! 🌳树洞陪聊陪玩交友程序系统 你…...
区间动态规划——最长回文子序列长度(C++)
把夜熬成粥,然后喝了它。 ——2024年7月1日 书接上回:区间动态规划——最长回文子串(C)-CSDN博客,大家有想到解决办法吗? 题目描述 给定一个字符串s(s仅由数字和英文大小写字母组成࿰…...
无人机远程控制:北斗短报文技术详解
无人机(UAV)技术的快速发展和应用,使得远程控制成为了一项关键技术。无人机远程控制涉及无线通信、数据处理等多个方面,其中北斗短报文技术以其独特的优势,在无人机远程控制领域发挥着重要作用。本文将详细解析无人机远…...
240627_关于CNN中图像维度变化问题
240627_关于CNN中图像维度变化问题 在学习一些经典模型时,其中得维度变化关系总搞不太明白,集中学习了以下,在此作以梳理总结: 一般来说涉及到的维度变换都是四个维度,当batch size4,图像尺寸为640*640&a…...
食品行业怎么用JSON群发短信
食品作为日常生活不可缺少的元素,市场需求是很稳定的,但是份额就那么多,商家都要来抢占的话,就需要运营推广各凭本事,市场运营中选择合适的推广方式,可以增加店铺销售额,很多实体店或商城都会建…...
MySQL高级-MVCC-隐藏字段
文章目录 1、介绍2、测试2.1、进入服务器中的 /var/lib/mysql/atguigu/2.2、查看有主键的表 stu2.3、查看没有主键的表 employee2.3.1、创建表 employee2.3.2、查看表结构及其其中的字段信息 1、介绍 ---------------- | id | age | name | ---------------- | 1 | 1 | Js…...
探索PcapPlusPlus开源库:网络数据包处理与性能优化
文章目录 0. 本文概要1. PcapPlusPlus介绍1.1 概述1.2主要特性和功能1.3 PcapPlusPlus 主要模块关系和依赖1.4 网络协议层处理过程 2. 实例2.1 基于 PcapPlusPlus 的应用程序设计和封装流程:2.2 多线程示例代码2.3 代码说明: 3. 程序性能进一步优化3.1 避…...
深入理解SSH:网络安全的守护者
在当今数字化时代,网络安全已成为全球关注的焦点。随着网络攻击手段的不断升级,保护数据传输的安全性变得尤为重要。SSH(Secure Shell)作为一种安全的网络协议,为远程登录和网络服务提供了强大的安全保障,成…...
DDD学习笔记四
领域模型的构建 基础领域模型的基本组成有名称、属性、关联、职责、事件和异常 发掘领域概念3种策略: 1)学习已有系统,重用已有模型 2)使用分类标签。分类标签来源于领域,需要我们研究一些资料并做一些提炼。从采用5W…...
Head First设计模式中的典型设计模式解析与案例分析
Head First设计模式中的典型设计模式解析与案例分析 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! 《Head First设计模式》是一本广受欢迎的书籍,…...
iptables 防火墙(一)
iptables 防火墙(一) 一、Linux 防火墙基础防火墙分类 二、iptables 的表、链结构规则表规则链数据包过滤的匹配流程 三、编写防火墙规则iptables 的安装iptables的基本语法规则的匹配条件通用匹配隐含匹配显式匹配 四、总结 在网络安全的世界里…...
数据库物理结构设计-定义数据库模式结构(概念模式、用户外模式、内模式)、定义数据库、物理结构设计策略
一、引言 如何基于具体的DBMS产品,为数据库逻辑结构设计的结果,即关系数据库模式,制定适合应用要求的物理结构 1、在设计数据库物理结构前,数据库设计人员首先 要充分了解所用的DBMS产品的功能、性能和特点,包括提供…...
QT加载安装外围依赖库的翻译文件后翻译失败的现象分析:依赖库以饿汉式的形式暴露单例接口导致该现象的产生
1、前提说明 VS2019 QtClassLibaryDll是动态库,QtWidgetsApplication4是应用程序。 首先明确:动态库以饿汉式的形式进行单例接口暴露; 然后,应用程序加载动态库的翻译文件并进行全局安装; // ...QTranslator* trans = new QTranslator();//qDebug() << trans->…...
第19节 Node.js Express 框架
Express 是一个为Node.js设计的web开发框架,它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用,和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...
大数据学习栈记——Neo4j的安装与使用
本文介绍图数据库Neofj的安装与使用,操作系统:Ubuntu24.04,Neofj版本:2025.04.0。 Apt安装 Neofj可以进行官网安装:Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...
Objective-C常用命名规范总结
【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名(Class Name)2.协议名(Protocol Name)3.方法名(Method Name)4.属性名(Property Name)5.局部变量/实例变量(Local / Instance Variables&…...
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...
cf2117E
原题链接:https://codeforces.com/contest/2117/problem/E 题目背景: 给定两个数组a,b,可以执行多次以下操作:选择 i (1 < i < n - 1),并设置 或,也可以在执行上述操作前执行一次删除任意 和 。求…...
OkHttp 中实现断点续传 demo
在 OkHttp 中实现断点续传主要通过以下步骤完成,核心是利用 HTTP 协议的 Range 请求头指定下载范围: 实现原理 Range 请求头:向服务器请求文件的特定字节范围(如 Range: bytes1024-) 本地文件记录:保存已…...
Java 加密常用的各种算法及其选择
在数字化时代,数据安全至关重要,Java 作为广泛应用的编程语言,提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景,有助于开发者在不同的业务需求中做出正确的选择。 一、对称加密算法…...
前端开发面试题总结-JavaScript篇(一)
文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包(Closure)?闭包有什么应用场景和潜在问题?2.解释 JavaScript 的作用域链(Scope Chain) 二、原型与继承3.原型链是什么?如何实现继承&a…...
JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作
一、上下文切换 即使单核CPU也可以进行多线程执行代码,CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短,所以CPU会不断地切换线程执行,从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...
【论文阅读28】-CNN-BiLSTM-Attention-(2024)
本文把滑坡位移序列拆开、筛优质因子,再用 CNN-BiLSTM-Attention 来动态预测每个子序列,最后重构出总位移,预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵(S…...
