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.c
  4   gcc -c main.c
  5 processbar.o:processbar.c
  6   gcc -c processbar.c
  7 
  8 .PHONY:clean
  9 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 102
  7 #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 //version1
  7 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*1024
  5 
  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 }

        

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

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

相关文章

【华为HCIP | 华为数通工程师】IPV4与IPV6 高频题(2)

个人名片&#xff1a; &#x1f43c;作者简介&#xff1a;一名大三在校生&#xff0c;喜欢AI编程&#x1f38b; &#x1f43b;‍❄️个人主页&#x1f947;&#xff1a;落798. &#x1f43c;个人WeChat&#xff1a;hmmwx53 &#x1f54a;️系列专栏&#xff1a;&#x1f5bc;️…

机器学习的线性回归与非线性回归

一元线性回归 回归分析用来建立方程模拟两个或者多个变量之间如何关联 一元线性回归包括一个自变量和一个因变量 如果包含两个以上的自变量&#xff0c;则称为多元线性回归 代价函数&#xff08;损失函数&#xff09; 损失函数的最终目的是为了使得误差平方和最小 用梯度下…

【装包拆包----泛型】

文章目录 装箱和拆箱泛型创建一个泛型数组泛型的上界泛型方法 装箱和拆箱 装箱&#xff1a; 把基本数据类型给到引用数据类型 public static void main(String[] args) {//自动装包//第一种装包Integer c 12;//第二种装包int a 7;Integer b a;//显示装包Integer aa Intege…

大语言模型|人工智能领域中备受关注的技术

个人主页&#xff1a;【&#x1f60a;个人主页】 系列专栏&#xff1a;【❤️其他领域】 文章目录 前言关于大语言模型大语言模型是什么&#xff1f;大语言模型有什么用?文案写作知识库回答文本分类代码生成 AWS 如何通过 LLM 提供帮助&#xff1f;Amazon BedrockAmazon SageM…

QT day3作业

1.思维导图 2、 完善对话框&#xff0c;点击登录对话框&#xff0c;如果账号和密码匹配&#xff0c;则弹出信息对话框&#xff0c;给出提示”登录成功“&#xff0c;提供一个Ok按钮&#xff0c;用户点击Ok后&#xff0c;关闭登录界面&#xff0c;跳转到其他界面 如果账号和密…

【Oracle 客户端连接数据库过程解析】

文章目录 一、开篇二、Oracle客户端简介三、连接过程解析 一、开篇 Oracle数据库以其卓越的性能和稳定性赢得了众多企业的信赖。作为开发者或数据库管理员&#xff0c;理解Oracle客户端如何与数据库建立连接&#xff0c;是确保系统正常运行的关键。 二、Oracle客户端简介 首…

LabVIEW进行MQTT通信及数据解析

需求&#xff1a;一般通过串口的方式进行数据的解析&#xff0c;但有时候硬件的限制&#xff0c;没法预留串口&#xff0c;那么如何通过网络的方式特别是MQTT数据的通信及解析 解决方式&#xff1a; 1.MQTT通信控件&#xff1a; 参考开源的mqtt-LabVIEW https://github.com…

PostGIS学习教程七:关于几何图形的练习

文章目录 一、函数列表二、练习 一、函数列表 以下是我们迄今为止看到的所有函数的汇总&#xff0c;它们应该对练习有用&#xff01; sum(expression) aggregate to return a sum for a set of records count(expression) aggregate to return the size of a set of records …

JAVA G1垃圾收集器介绍

为解决CMS算法产生空间碎片和其它一系列的问题缺陷&#xff0c;HotSpot提供了另外一种垃圾回收策略&#xff0c;G1&#xff08;Garbage First&#xff09;算法&#xff0c;通过参数-XX:UseG1GC来启用&#xff0c;该算法在JDK 7u4版本被正式推出&#xff0c;官网对此描述如下&am…

JS-项目实战-更新水果单价更新小计更新总计

1、fruit.js //当页面加载完成后执行后面的匿名函数 window.onload function () {//get:获取 Element:元素 By:通过...方式//getElementById()根据id值获取某元素let fruitTbl document.getElementById("fruit_tbl");//table.rows:获取这个表格的所有的行&a…

目标检测—Yolo系列(YOLOv1/2/v3/4/5/x/6/7/8)

目标检测概述 什么是目标检测&#xff1f; 滑动窗口&#xff08;Sliding Window&#xff09; 滑动窗口的效率问题和改进 滑动窗口的效率问题&#xff1a;计算成本很大 改进思路 1&#xff1a;使用启发式算法替换暴力遍历 例如 R-CNN&#xff0c;Fast R-CNN 中使用 Selectiv…

S32DS踩坑日记五-bootloader跳转APP时触发DefaultISR

S32DS踩坑日记五-bootloader跳转APP时触发DefaultISR bootloader和APP由另一位同事开发过程中&#xff0c;被导师叫回去写论文了。 由于项目不急&#xff0c;接手后未作任何改动&#xff0c;后面硬件工程师手工焊了几块电路版&#xff0c;需要刷上程序测试电路板。然后就遇到了…

手摸手入门Springboot2.7集成Swagger2.9.2

环境介绍 技术栈 springbootmybatis-plusmysqloracleSwagger 软件 版本 mysql 8 IDEA IntelliJ IDEA 2022.2.1 JDK 1.8 Spring Boot 2.7.13 mybatis-plus 3.5.3.2 REST软件架构风格 REST即表述性状态传递&#xff08;英文&#xff1a;Representational State T…

Linux项目自动化构建工具-make/Makefile

背景 会不会写makefile&#xff0c;从一个侧面说明了一个人是否具备完成大型工程的能力 一个工程中的源文件不计数&#xff0c;其按类型、功能、模块分别放在若干个目录中&#xff0c;makefile定义了&#xff0c;一系列的规则来指定&#xff0c;哪些文件需要先编译&#xff0c;…

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

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

2023年【北京市安全员-B证】试题及解析及北京市安全员-B证证考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 北京市安全员-B证试题及解析根据新北京市安全员-B证考试大纲要求&#xff0c;安全生产模拟考试一点通将北京市安全员-B证模拟考试试题进行汇编&#xff0c;组成一套北京市安全员-B证全真模拟考试试题&#xff0c;学员…

word批量图片导出wps office word 图片批量导出

word批量导出图片教程 背景 今天遇到了一个场景&#xff0c;因为word里的图片打开看太模糊了&#xff0c;如果一个一个导出来太麻烦。想批量将word中的图片全部导出 但是&#xff0c;wps导出的时候需要会员 教程开始&#xff1a; 将word保存为 .docx 格式&#xff0c;可以按F1…

JWT登录认证(2认证)

备注说明&#xff1a; 用户登录成功后&#xff0c;系统会自动下发JWT令牌&#xff0c;然后在后续的每次请求中&#xff0c;浏览器都需要在请求头header中携带到服务器&#xff0c;请求头的名称为Authorization&#xff0c;值为登录时下发的JWT令牌。 如果检测到用户未登录&…

mysql之搭建MHA架构实现高可用

1、定义 全称是masterhigh avaliabulity。基于主库的高可用环境下可以实现主从复制及故障切换&#xff08;基于主从复制才能故障切换&#xff09; MHA最少要求一主两从&#xff0c;半同步复制模式 2、作用 解决mysql的单点故障问题。一旦主库崩溃&#xff0c;MHA可以在0-30…

​软考-高级-系统架构设计师教程(清华第2版)【第8章 系统质量属性与架构评估(P286~319)-思维导图】​

软考-高级-系统架构设计师教程&#xff08;清华第2版&#xff09;【第8章 系统质量属性与架构评估&#xff08;P286~319&#xff09;-思维导图】 课本里章节里所有蓝色字体的思维导图