Linux 小程序-进度条

1.进度条准备知识

        1.1回车与换行

        以前的键盘会有一个这样的按键 ,这个键就是回车与换行。

        回车:从当前行回退到当前行的起始位置。

        换行:从当前行切换到下一行的该位置。

        有了以上的认识我们可以写出一个简单的倒计时代码:

        注意:在linux下 “\r” 是回车然后在打印。

        这样就能在显示行打印出倒计时的感觉了。

1.2缓冲区

        先来看一段代码

                 现象:

                命令行先停止了三秒,然后才会出来 hello word。

                这是为什么呢?是先执行了sleep(3); 这一行代码吗?

                不是的,因为c对io函数提供了一个缓冲区,这段代码执行的结果先被保存在缓冲区中,之后等程序完成后才刷新到屏幕上。

                所以有没有什么方法让显示器即刻刷新?有的!通过使用 fflush(stdout) 命令!

                这样就能即可在命令行刷新出hello word 无需等待!!!

1.3简单进度条

        简单进度条的代码如下:

2.进度条

        1.创建makefile文件

2.进度条代码

        1.在主函数中调用函数。

          2.头文件中定义各种变量

        3.

        进度条运行过程: 

        结束:

3.进度条进阶

        上面写的进度条并没有根据实际的下载进度来显示进度,而是以固定模式来显示进度。

        我们可以根据当前的实际情况来显示进度,比如根据文件的传输速率来显示进度。

代码:

makefile:

  1 processbar:main.o processbar.o                                                                                                               2   gcc -o $@ $^3 main.o:main.c4   gcc -c main.c5 processbar.o:processbar.c6   gcc -c processbar.c7 8 .PHONY:clean9 clean:10   rm main.o processbar.o processbar 11 

processbar.h

  1 #pragma once 2 #include<stdio.h>3 #include<string.h>4 #include<unistd.h>5 6 #define NUM 1027 #define Body  '='8 #define Head  '>'9 10 void process();                                                                                                                              11 typedef void (*callback_t)(double);12 13 void process_flush( double rate );

processbar.c

#include"processbar.h"2 3 const char *lable = "|/-\\|/-\\";4 5 6 //version17 void process()8 {9   char buffer[NUM];10   memset(buffer , '\0',sizeof(buffer));11   int cnt = 0;12   int n = strlen(lable);13   buffer[0] = Head;14   while(cnt <= 100)15   {16   printf("[%-100s][%3d%%][%c]\r",buffer,cnt,lable[cnt%n]);17 18   fflush(stdout);19   buffer[cnt++] = Body;20  if(cnt < 100)  buffer[cnt] = Head;21   usleep(50000);22 23   }24 25 printf("\n");26 27 }1 //version : 进度是多少,你的进度条能知道吗另外,什么进度?依附于其他应用,比如下载32 //                                                                                                                                           33 char buffer[NUM] = {0};34 void process_flush(double rate)35 {36 37   static  int cnt = 0;38   int n = strlen(lable);39   if(rate <= 1.0) buffer[0] = Head;40   41   printf("[%-100s][%.1f%%][%c]\r",buffer,rate,lable[cnt%n]);42 43   fflush(stdout);44   buffer[(int)rate] = Body;45   if((int)rate+1 < 100) buffer[(int)(rate+1)] = Head;46   if(rate>= 100.0) printf("\n");47 48   cnt++;49   cnt %= n;50 }

main.c:

#include<time.h>3 #include<stdlib.h>4 #define FILESIZE 1024*1024*10245 6 void download(callback_t cd)7 {8   srand(time(NULL)^1023);9   int total = FILESIZE;10   while(total)11   {12     usleep(1000);13     int one = rand()%(1024*1024);14     total -= one;15     if(total < 0) total = 0;16 17     //当前的进度是多少?18     int download = FILESIZE - total;19     double rate = (download*1.0 /(FILESIZE))*100.0;20     cd(rate);21 //    printf("download: %f\n",rate); //rate有啦,应该让进度条刷新22 23 24   }25 26 27 }int main()34 {35 //  process();36   download(process_flush);                                                                                                                   37   return 0 ;38 }

        

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2023.11.15-hivesql之炸裂函数explode练习

把一个容器的多个数据炸裂出单独展示: explode(容器) 需求:将NBA总冠军球队数据使用explode进行拆分&#xff0c;并且根据夺冠年份进行倒序排序。 1.建表 --step1:建表 create table the_nba_championship(team_name string,champion_year array<string> ) row format…

【Java】若依的使用代码生成及字典的使用

一、导言 1、介绍 若依管理系统是一款基于Java语言开发的开源管理系统。它采用了Spring Boot框架&#xff0c;使得开发更加快速和高效。同时&#xff0c;它还集成了MyBatis Plus&#xff0c;进一步简化了数据库操作。若依管理系统的界面简洁美观&#xff0c;且支持多语言&#…

Python实现猎人猎物优化算法(HPO)优化XGBoost分类模型(XGBClassifier算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 猎人猎物优化搜索算法(Hunter–prey optimizer, HPO)是由Naruei& Keynia于2022年提出的一种最新的…

我把微信群聊机器人项目开源

▍PART 序 开源项目地址》InsCode - 让你的灵感立刻落地 目前支持的回复 ["抽签", "天气", "讲笑话", "讲情话", "梦到", "解第", "动漫图", "去水印-", "历史今天", "星座-…

前端对用户名密码加密处理,后端解密

一. 正常表单提交如图&#xff0c;可以看见输入的用户名密码等 二. 使用crypto-js.min.js进行前端加密处理 js资源地址链接&#xff1a;https://pan.baidu.com/s/1kfQZ1SzP6DUz50D–g_ziQ 提取码&#xff1a;1234 前端代码 <script type"text/javascript" src&q…

【数据结构】顺序表详解

文章目录 前言 一、顺序表是什么 二、顺序表的基本操作 1.初始化 实现思想&#xff1a; 代码如下&#xff08;示例&#xff09;&#xff1a; 2.顺序表扩容函数 实现思想&#xff1a; 代码如下&#xff08;示例&#xff09;&#xff1a; 3.顺序表头插 实现思想&#…

记录一次 添加脚本的记录+改错记录

1.Update 和 Delete 一定要记得where条件 update 表名称 set 字段1‘修改的值’ &#xff08;单引号&#xff09; where 字段‘’ and Aid‘’; update jxkh22 set JXKH2200001 ,JXKH2201002 where B003 and JXKH22034;delete from table_name where condition delete from …

推荐系统笔记--基于物品的协同过滤(Item CF)

1--基本原理 Item CF的原理是根据物品的相似度来将新的物品推荐给用户&#xff1b;下图中用户对红色物品的感兴趣度为 [2, 1, 4, 3]&#xff0c;红色物品与橙色物品的相似度为 [0.1, 0.4, 0.2, 0.6]&#xff0c;因此可以计算出用户对橙色物品的感兴趣度。 Item CF的基本思想是&…

C语言--每日五道选择题--Day12

第一题 1、如下程序的功能是&#xff08; &#xff09; #include <stdio.h> int main() {char ch[80] "123abcdEFG*&";int j;puts(ch);for(j 0; ch[j] ! \0; j){if(ch[j] > A && ch[j] < Z){ch[j] ch[j] e - E;}}puts(ch);return 0; } A…

汽车操纵稳定性matlab仿真

1、内容简介 略 14-可以交流、咨询、答疑 2、内容说明 汽车操纵稳定性matlab仿真&#xff0c;包含完整的论文 操纵动力学、两自由度 摘要&#xff1a;当今&#xff0c;仿真技术日益广泛地应用于汽车工程领域&#xff0c;操纵稳定性研究越来越多地使用成熟的计算机仿真理论…

肝了一周,整理了Python 从0到1学习路线(附思维导图和PDF下载)

前段时间&#xff0c;我们陆续分享了一些关于Python基础知识&#xff0c;以及现在比较流行的Python各领域的学习知识&#xff0c;后台有很多小伙伴反馈&#xff0c;想要系统的自学Python&#xff0c;希望我们可以提供一个框架&#xff0c;方便作为参考&#xff0c;学习Python。…

unity使用vs进行c#代码提示,查看F12unity元代码

unity关联vs 在vs中让cs.meta显示&#xff0c;鼠标右键&#xff0c;包含在内 提示GameObject类了 感谢下面这位的提示https://zhuanlan.zhihu.com/p/551119106