玩转Linux进度条
准备工作:
一.关于缓冲区
首先,咱们先来一段有意思的代码:
#include<stdio.h>
#include<unistd.h>
int main()
{printf("you can see me");sleep(5);}
你可以在你的本地运行一下,这里我告诉大家运行结果:这一段字符串等到程序运行结束后才被显示出来。有些同学感觉非常震惊,但这就是运行结果。
我们都知道,这段代码是顺序运行结构,就是从前往后依次执行,毫无疑问,这段字符串肯定被优先执行,那么,为什么没有被显示出来?这5秒内,字符串在什么位置?
字符串一直在缓冲取内,等到运行结束时,才被刷新出来。那,怎么才能让字符串在sleep前出现呢?
这里,我说明两种方式:
方式一:
#include<stdio.h>
#include<unistd.h>
int main()
{printf("you can see me\n");sleep(5);}
在printf中加入换行符,因为\n默认的是行刷新,
#include<stdio.h>
#include<unistd.h>
int main()
{printf("you can see me\n");printf("you can see ");sleep(5);}
我们来运行一下,会发现:第一字符串打印出来了,第二个字符串等到程序结束时,才显示出来!
方式二:
#include<stdio.h>
#include<unistd.h>
int main()
{printf("you can see me\n");fflush(stdout)sleep(5);}
fflush(stdout)表示手动刷新缓冲区的操作。
二.\r,\n
\r是回车,\n是换行,所以\r\n 是回车换行,但是在语言层面,\n就代表着回车+换行。
我们举个栗子:
#include<stdio.h>
int main()
{printf("aaaaa\r");printf("11");return 0;
}
运行结果是:

果真像我们分析的那样,程序运行完第一行,"aaaaa"被打印出来,然后光标回到行首,开始打印"11",这个位置原来的数据被后来的数据所覆盖,所以打出来,就是这个样子。
三.关于显示屏
其实,不知道大家有没有好奇过:我们的数字和字母都是怎么出现在显示屏的呢?原理很简单!!
在显示屏看来,不过是字符还是数组还是汉字,都是由字符构成,比如在显示屏上打印出1234,显示屏就把1234看作4个字符,然后点亮这4个字符的光点,所以,我们就看见了1234。
四.制作一个一分钟倒计时
#include<stdio.h>
#include<unistd.h>
int main()
{int num = 60;while (num){printf("%d\r", num);fflush(stdout);num--;}
}
二.制作一个进度条
效果演示:

写在前面,这个进度条,我们准备分文件写,分别为main.cc,process.cc,process.h,下面,将一一介绍各个文件的作用:
进度条代码:
makefile:
myproc:process.cc main.cc gcc -o myproc process.cc main.cc //-o后边的文件默认为生成的文件,其他的都是依赖文件
.PHONY:clean
clean:rm -f myproc
main.cc:
#include "process.h"int main()
{myprocess();}
代码so easy!!
process.h:
#include<stdio.h>
#include<string.h>
#include<unistd.h>#define Num 101
#define STYLE '#'const char lable[]="|/-\\";
extern void myprocess();
process.cc:
#include "process.h"void myprocess()
{int cnt=0;char buf[Num];memset(buf,'\0',sizeof buf);//利用字符串初始化函数,初始化字符串为0;while(cnt<Num){if(cnt<Num-1)buf[cnt]=TAIL;printf("[%-100s][%-3d%%][%c]\r",buf,cnt,lable[cnt%4]);//[%-100s]:先留出100个字符的长度,保证从前往后显示;%%:表示百分号buf[cnt++]=STYLE;fflush(stdout);usleep(50000);//usleep:和sleep效果相同,但usleep以微妙为单位,但sleep以秒为单位}printf("\n");
}
3、实现过程分析
进度条样式 :
主体样式为两个中括号包裹,中间 => 推进的方式呈现,比如:[======>]
主体右侧中括号位置保持不变,中间元素不断推进,比如:[=> ]
因此我们把中间主体 = 宏定义为 STYLE,把尾侧 > 宏定义为 TAIL
进度条百分比:
显示当前加载进度,用 [rate%] 显示,rate 随着进度条的不断推进而变化,而打印 %(转义字符)则需要两个 %%
进度条旋转字符:
显示加载样式,可以利用一个旋转的字符,例如 [] 的样式,顺时针不断旋转,依次为 “| / - \”,注意 \ 也是转义字符,因此需要两个 \ \,对此我们定义一个lable指针指向常量字符串const char *lable=" | / - \ "
相关文章:
玩转Linux进度条
准备工作: 一.关于缓冲区 首先,咱们先来一段有意思的代码: #include<stdio.h> #include<unistd.h> int main() {printf("you can see me");sleep(5);} 你可以在你的本地运行一下,这里我告诉大家运行结果…...
真国色码上赞,科技流量双剑合璧,商家获客新纪元开启
在数字化浪潮汹涌的今天,真国色研发团队依托红玉房网络科技公司的雄厚实力,凭借科技领先的核心竞争力,推出了创新性的商家曝光引流工具——码上赞。这款工具借助微信支付与视频号已有功能,为实体商家提供了一种全新的引流获客方式,实现了科技与商业的完美融合。 科技领先,流量黑…...
C++:特殊类设计和四种类型转换
一、特殊类设计 1.1 不能被拷贝的类 拷贝只会放生在两个场景中:拷贝构造函数以及赋值运算符重载,因此想要让一个类禁止拷贝,只需让该类不能调用拷贝构造函数以及赋值运算符重载即可。 C98: 1、将拷贝构造函数与赋值运算符重载只…...
(南京观海微电子)——屏幕材质及优缺点对比
LED/LCD LCD(Liquid Crystal Ddisplay)即“液晶显示器”,由两块偏光镜、两块薄膜晶体管以及彩色滤光片、光源(荧光灯)、显示面板组成的成像元器件。 LED(Light Emitting Diode)即“发光二极管…...
uniapp uni.showModal 出现点击没有反应
uni.showModal 里面有好些参数 点击后不弹出 是因为 出现了 null 或者undifind 字符 特别是content 里面 title: 提示, cancelColor: #000000, editable: true,//是否显示输入框 content: item.text?item.te…...
Vue3-VueRouter
客户端 vs. 服务端路由 服务端路由指的是服务器根据用户访问的 URL 路径返回不同的响应结果。当我们在一个传统的服务端渲染的 web 应用中点击一个链接时,浏览器会从服务端获得全新的 HTML,然后重新加载整个页面。 然而,在单页面应用中&a…...
【图像处理与机器视觉】频率域滤波
知识铺垫 复数 CRjI 可以看作复平面上的点,则该复数的坐标为(R,I) 欧拉公式 e j θ c o s θ j s i n θ e^{j\theta} cos \theta j sin \theta ejθcosθjsinθ 极坐标系中复数可以表示为: C ∣ C ∣ ( c o s…...
python第五次作业
1.请实现一个装饰器,每次调用函数时,将函数名字以及调用此函数的时间点写入文件中 # 导入datetime模块,用于获取当前时间并格式化输出 import datetime# 定义一个装饰器工厂函数log_funcName_time,它接受一个参数time def log_fu…...
JS面向对象编程
目录 实例对象与new命令this关键字对象的原型和继承Object对象的相关方法浅拷贝和深拷贝严格模式实例对象与new命令 构造函数 构造函数的特点有两个: 函数体内部使用了this关键字,代表了所要生成的对象实例。生成对象的时候,必须使用new命令。var Vehicle...
kotlin1.8.10问题导致gson报错TypeToken type argument must not contain a type variable
书接上回,https://blog.csdn.net/jzlhll123/article/details/139302991。 之前我发现gson报错后: gson在2.11.0给我的kotlin项目代码报错了。 IllegalArgumentException: TypeToken type argument must not contain a type variable 上次解释原因是因为&…...
数据库漫谈-国产数据库
国产数据库突然大量出现,下表列出(按首字母排序 ) AISWare AntDB,亚信科技。 AliSQL,阿里云。 Analyticdb,阿里云。 ArkDB,北京极数云舟科技有限公司。 CynosDB,腾讯云 DM&…...
小白跟做江科大32单片机之光敏传感器控制蜂鸣器
代码部分 1.思路 通过光敏电阻,控制蜂鸣器的发声 2.butter.h代码 #ifndef _BUTTER__H #define _BUTTER__H void butter_Init(void); void butter_on(void); void butter_off(void); #endif 3.butter.c代码 #include "stm32f10x.h" void butter…...
使用 Django Channels 构建实时聊天应用(包含用户认证和消息持久化)
文章目录 准备工作创建 Django 项目创建应用程序配置项目编写 Consumer编写路由创建 URL 路由运行应用用户认证消息持久化显示历史消息结论 Django Channels 是 Django 的一个扩展,允许在 Web 应用中添加实时功能,例如 Websockets、HTTP2 和其他协议。本…...
【Elasticsearch】es基础入门-03.RestClient操作文档
RestClient操作文档 示例: 一.初始化JavaRestClient (一)引入es的RestHighLevelClient依赖 <!--elasticsearch--> <dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest…...
LeetCode - 二分查找(Binary Search)算法集合(Python)[左右边界|旋转数组|双列表]
欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/139419653 二分查找,也称为折半查找,是一种在有序数组中查找特定元素的高效算法。其基本原理是将待搜索的区间分成两半&am…...
android睡眠分期图
一、效果图 做医疗类项目,经常会遇到做各种图表,本文做的睡眠分期图。 二、代码 引入用到的库 api joda-time:joda-time:2.10.1 调用代码 /*** 睡眠* 分期*/private SleepChartAdapter mAdapter;private SleepChartAttrs mAttrs;private List<SleepI…...
2023年信息素养大赛小学组C++智能算法复赛真题
今天给大家分享2023年全国青少年信息素养大赛小学组C智能算法挑战赛复赛里面的一套真题,希望有助于大家了解复赛的难度及备考。 其他真题下载:网盘-真题-信息素养大赛...
独立游戏开发的 6 个步骤
💂 个人网站:【 摸鱼游戏】【神级代码资源网站】【工具大全】🤟 一站式轻松构建小程序、Web网站、移动应用:👉注册地址🤟 基于Web端打造的:👉轻量化工具创作平台💅 想寻找共同学习交…...
Stable Diffusion AI绘画:从创意词汇到艺术图画的魔法之旅
文章目录 一、Stable Diffusion的工作原理二、从提示词到模型出图的过程三、Stable Diffusion在艺术创作中的应用《Stable Diffusion AI绘画从提示词到模型出图》内容简介作者简介楚天 目录前言/序言本书特色特别提示 获取方式 在科技的飞速发展中,Stable Diffusion…...
使用C++实现高效的套接字连接池
在现代网络应用中,高效管理网络连接是实现高并发和低延迟的重要因素。下面将详细介绍如何使用C实现一个高效的套接字连接池,以便在需要时快速复用连接,从而提高系统性能和资源利用率。 一、什么是连接池? 连接池是一种管理网络连…...
CLIP图文匹配测试工具:5分钟本地部署,零基础验证AI识图能力
CLIP图文匹配测试工具:5分钟本地部署,零基础验证AI识图能力 1. 工具简介与核心价值 你是否遇到过这样的场景:手头有一批产品图片,需要快速判断它们与哪些文字描述最匹配?或者想验证AI模型是否能准确理解图片内容&…...
从理论到面包板:手把手搭建Series-Shunt反馈放大器(含阻抗匹配避坑指南)
从理论到面包板:手把手搭建Series-Shunt反馈放大器(含阻抗匹配避坑指南) 在电子工程实践中,反馈放大器设计是模拟电路领域的核心技能之一。Series-Shunt结构因其出色的电压放大特性和相对简单的实现方式,成为初学者入门…...
CentOS7下KingbaseES V9与MySQL性能对比实测:从安装到查询优化的全流程体验
CentOS7下KingbaseES V9与MySQL性能对比实测:从安装到查询优化的全流程体验 在国产数据库技术快速发展的今天,越来越多的企业开始关注从传统数据库向国产化解决方案的迁移。作为国产数据库中的佼佼者,KingbaseES V9凭借其出色的MySQL兼容性和…...
OBS智能背景移除插件:无绿幕实时抠图与低光增强完整指南
OBS智能背景移除插件:无绿幕实时抠图与低光增强完整指南 【免费下载链接】obs-backgroundremoval An OBS plugin for removing background in portrait images (video), making it easy to replace the background when recording or streaming. 项目地址: https:…...
QuickBMS技术探索者指南:游戏资源解析与逆向工程实战
QuickBMS技术探索者指南:游戏资源解析与逆向工程实战 【免费下载链接】QuickBMS QuickBMS by aluigi - Github Mirror 项目地址: https://gitcode.com/gh_mirrors/qui/QuickBMS 在数字内容创作与逆向工程领域,文件格式的多样性与加密机制的复杂性…...
语言的边界,与软件的命运
. GIF文件结构 相比于 WAV 文件的简单粗暴,GIF 的结构要精密得多,因为它天生是为了网络传输而设计的(包含了压缩机制)。 当我们用二进制视角观察 GIF 时,它是由一个个 数据块(Block) 组成的&…...
5大核心功能深度解析:Umi-OCR开源离线文字识别工具的技术实现与应用指南
5大核心功能深度解析:Umi-OCR开源离线文字识别工具的技术实现与应用指南 【免费下载链接】Umi-OCR OCR software, free and offline. 开源、免费的离线OCR软件。支持截屏/批量导入图片,PDF文档识别,排除水印/页眉页脚,扫描/生成二…...
Ostrakon-VL扫描终端实战:识别冷柜温度计读数并判断是否符合标准
Ostrakon-VL扫描终端实战:识别冷柜温度计读数并判断是否符合标准 1. 项目背景与价值 在零售和餐饮行业中,冷链管理是确保食品安全的关键环节。传统的人工检查冷柜温度方式存在效率低、易出错等问题。Ostrakon-VL扫描终端通过创新的像素风格界面和强大的…...
智能排障:快马ai助手实时解答openclaw安装难题,告别卡壳
最近在折腾OpenClaw这个工具时,发现它的安装过程真是让人头大——各种依赖报错、环境冲突、权限问题接踵而至。好在发现了InsCode(快马)平台的AI辅助功能,简直像给安装过程装上了智能导航。下面分享我的实战经验,如何用AI快速攻克OpenClaw安装…...
Awesome-Awesome终极指南:如何快速找到任何技术领域的最佳资源
Awesome-Awesome终极指南:如何快速找到任何技术领域的最佳资源 【免费下载链接】awesome-awesome A curated list of awesome curated lists of many topics. 项目地址: https://gitcode.com/gh_mirrors/aw/awesome-awesome 在技术学习和开发过程中ÿ…...
