【Linux操作系统】如何实现Linux中软件安装进度条?
2023-09-11 14:16:59 时间
Linux下安装软件时,经常会看到类似上图的进度条,今天带大家用C语言来演示其原理!
一.回车与换行
俗话:回车换行,实际是回车和换行的组合
- 回车是回到当前行的最开始,字符表示:‘
\r
’ - 换行是换到下一行的当前位置,字符表示:‘
\n
’
但一般在C/C++等语言范畴,用‘\n’来表示回车+换行
二.缓冲区问题
先来看两段简单代码,比较观察现象:
第一段代码:带\n
运行结果:先打印,再sleep3秒
第二段代码:不带\n
运行结果:先sleep3秒,再打印
现象分析:
实际上,由于我们的程序是顺序结构,一定会先执行printf,再执行sleep,但是printf语句执行并不意味着就会先打印到外设!
printf执行后,没有打印到外设,实际上要打印的内容被放到叫做“缓冲区
”的区域,这里不细讲,缓冲区要经过刷新后才能将要打印的内容显示到显示器上!
我们上面‘\n
’采用的实际上是一种行缓冲的策略,先按照一行保存要打印的内容,知道遇到行刷新的指令时,按行刷新
对代码2解决办法:fflush(stdout)强制刷新
ps:
- fflush函数头文件: stdio.h,参数:标准输出流
- sleep函数头文件: unistd.h,参数采用单位:秒
三.倒计时小程序
实现一个新年倒计时小程序:
同样的,先来看两段简单代码,比较观察现象:
第一段代码:printf不带格式控制
运行结果:哈哈哈哈哈,这是倒计时吗?
第二段代码:printf带格式控制
四.进度条小程序
终于到我们的大Boss了,升级打怪!!!
#include<stdio.h>
#include<string.h>
#include<unistd.h>
#define NUM 4
char style[NUM]={'-','#','*','>'};
int main()
{
int cnt=0;
char bar[102];
const char* str="|/-\\";
memset(bar,'\0',sizeof(bar));
//100次
while(cnt<=100)
{
printf("[%-100s] [%d%%] [%c]\r",bar,cnt,str[cnt%4]);
fflush(stdout);
E> bar[cnt++]=style[N];
usleep(100000);
}
printf("\n");
return 0;
}
值得注意的几个细节:
- 整个进度条完成从0-100的时间控制:10s,10* 1000* 10000 /100=10000ms
- printf(“%-100s”,bar);100表示预留100域宽,-代表向左对齐
- 通过gcc test.c -o test -DN=1/2/3/4来完成预定义宏,从而实现多种进度条样式的切换
- ‘\’和‘%%’用到了转义字符的转义
- 审美问题:最后进度条完成后打印一个换行‘\n’
相关文章
- [Linux] ubuntu 软件安装必须看的网址
- 安装软件:/lib/ld-linux.so.2: bad ELF interpreter解决
- Linux下安装配置Nexus
- linux(ubuntu20.10) :编译安装redis6.0.9
- linux软件安装
- linux下安装apache(httpd-2.4.3版本)各种坑
- manjaro linux 安装espeak语音朗读软件并且简单使用
- Linux目录详解,软件应该安装到哪个目录
- Linux 0.11 - 进入内核前的苦力活完结篇
- VMWare软件linux虚拟机安装Ubuntu&BIOS设置
- 成功解决解决VM软件安装Linux的Ubuntu过程,打开时 Operating System not found
- 【实施工程师】Linux安装Windows软件:微信、QQ、TIM
- PHP面试题:简述Linux下安装PHP的过程?
- 安装Linux软件时没有图形界面的问题
- linux下 安装mysql教程
- 第四次考核 Jimmy 学徒考核 Linux安装软件 rna-seq上游分析 Linux上游 颜色配置 命令行配色 kingfisher
- Linux下Sublime Text 2的安装
- 74:应急响应-win&linux分析后门&勒索病毒&攻击 ==》暴力破解攻击成功的在4624的eventID里!PChunter可查看非系统的可疑启动项/服务/定时任务,还是很直观的!Linux下gscan也不错,EDR可参考。
- Linux CentOS7 安装FTP服务器
- Linux 软件安装到 /usr,/usr/local/ 还是 /opt 目录?
- Linux【JavaEE】—— 搭建 JavaEE 开发环境(附软件安装教程、下载地址)
- Day 19 - 安装 AlexeyAB/darknet ON Amazon Linux 2
- Linux 使用脚本编译安装mysql5.7.19(使用前请仔细阅读脚本)
- Linux系统上安装Windows虚拟机【VMware】
- 【Linux入门篇】四种软件查看、安装、卸载方式
- 安卓通过Linux Deploy安装linux系统