Linux实现简单进度条(附原理解释和动图效果)

1,行缓冲区

先看下面的代码和运行结果,

#include<stdio.h>
#include<unistd.h>
int main()
{printf("你好\n");sleep(3);return 0;
}

只是一个简单的打印“你好”然后休眠三秒,最后程序结束

再看下面的代码和运行结果: 

#include<stdio.h>
#include<unistd.h>
int main()
{printf("你好");sleep(3);return 0;
}

这串代码中我们把printf里面的 ' \n ' ,去掉了,那么运行结果就不同了,就变成了先休眠三秒,然后再打印的“你好”。该现象证明了,打印的时候,系统和屏幕中间是存在缓冲区的。

显示器对应的是行刷新,就是当缓冲区写满或者代码执行时遇到 ' \n ' 时,才会显示到屏幕上,至于原因我们到IO流部分会详细讲解,目前阶段可以通过“Linux下一切皆文件”的概念把屏幕也看成一个文件。  所以上面的第二个代码是先休眠三秒然后程序结束前把缓冲区数据刷新到屏幕上。

2,\n 与 \r

\n:我们很熟悉,就是换行

\r:这个我们用的不多,它表示使光标回到本行行首

简单来说,我们键盘上的回车键也就是Enter,按下代表 ‘ \n+\r ’。所以 \r代表回到本行行首,那么我们可以简单写一个程序,使运行后在同一个位置打印1 - 10,不换行,覆盖打印,如下代码

#include<stdio.h>
#include<unistd.h>
int main()
{int i = 1;for(i = 1; i <= 10; i++){printf("%d\r", i);fflush(stdout); //ffush表示强制刷新缓冲区,是刷新缓冲器的形式之一,其他刷新缓冲区的策略我们到文件系统再详细展开sleep(1);}return 0;
}

3,进度条代码和展示

#include<stdio.h>
#include<string.h>
#include<unistd.h>#define NUM 102int main()
{char bar[NUM];memset(bar,0,sizeof(bar));const char* lable="|/-\\"; //进度条后面4个符号int cnt =0;while(cnt <= 100){// printf("%s\n",bar);//打印,但是分行打印printf("[%-100s][%d%%] %c\r",bar,cnt,lable[cnt%4]); //利用\r,实现覆盖打印bar[cnt++] = '#';fflush(stdout);usleep(50000); //以后时间可以根据需求自定义}printf("\n"); //换行,防止最后shell的命令提示符信息覆盖掉进度条打印return 0;
}

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

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

相关文章

Docker-Compose单机多容器应用编排与管理

前言 Docker Compose 作为 Docker 生态系统中的一个重要组件&#xff0c;为开发人员提供了一种简单而强大的方式来定义和运行多个容器化应用。本文将介绍 Docker Compose 的使用背景、优劣势以及利用 Docker Compose 简化应用程序的部署和管理。 目录 一、Docker Compose 简…

数据库学习之常见的一些SQL命令

查看当前DBMS下所有数据库 show databases; 切换到某一个数据库 use 数据库名; 开启root的远程登录 update mysql.user set host"%" where user"root"; 刷新权限列表 flush privileges; 创建数据库 create database 数据库名称 删除数据库 drop…

CUDA架构介绍与设计模式解析

文章目录 **CUDA**架构介绍与设计模式解析**1** CUDA 介绍CUDA发展历程CUDA主要特性CUDA系统架构CUDA应用场景编程语言支持CUDA计算过程线程层次存储层次 **2** CUDA 系统架构分层架构并行计算模式生产-消费者模式工作池模式异步编程模式 **3** CUDA 中的设计模式工厂模式策略模…

django设计模式理解FBV和CBV

在 Web 开发中&#xff0c;FBV&#xff08;Function-Based Views&#xff09;和 CBV&#xff08;Class-Based Views&#xff09;是两种常见的视图设计模式&#xff0c;用于处理 HTTP 请求并生成相应的响应。下面是它们的简要解释&#xff1a; Function-Based Views (FBV) 在 …

闲话 Asp.Net Core 数据校验(三)EF Core 集成 FluentValidation 校验数据例子

前言 一个在实际应用中 EF Core 集成 FluentValidation 进行数据校验的例子。 Step By Step 步骤 创建一个 Asp.Net Core WebApi 项目 引用以下 Nuget 包 FluentValidation.AspNetCore Microsoft.AspNetCore.Identity.EntityFrameworkCore Microsoft.EntityFrameworkCore.Re…

SQL事前巡检插件

背景: 事故频发 •在工作过程中每年都会看到SQL问题引发的线上问题&#xff0c;一条有问题的SQL足以拖垮整个数据库 不易发觉 •对于SQL性能问题测试在预发环境不易发现&#xff08;数据量小&#xff09; •SAAS系统隔离字段在SQL条件中遗漏&#xff0c;造成越权风险 •业…

密链:openEuler20.03已安装的软件包列表

文章目录 openEuler20.03已安装的软件包列表 openEuler20.03已安装的软件包列表 rpm -qa[rootlocalhost tmp]# rpm -qa librelp-1.2.16-3.oe2003sp4.aarch64 p11-kit-trust-0.23.20-5.oe2003sp4.aarch64 python-setuptools-44.1.1-2.oe2003sp4.noarch luksmeta-9-5.oe2003sp4.…

【算法刷题 | 贪心算法08】4.29(划分字母区间、合并区间)

文章目录 14.划分字母区间14.1题目14.2解法&#xff1a;贪心14.2.1贪心思路14.2.2代码实现 15.合并区间15.1题目15.2解法&#xff1a;贪心15.2.1贪心思路15.2.2代码实现 14.划分字母区间 14.1题目 给你一个字符串 s 。我们要把这个字符串划分为尽可能多的片段&#xff0c;同一…

WebSocket 全面解析

&#x1f31f; 引言 WebSocket&#xff0c;一个让实时通信变得轻而易举的神器&#xff0c;它打破了传统HTTP协议的限制&#xff0c;实现了浏览器与服务器间的全双工通信。想象一下&#xff0c;即时消息、在线游戏、实时股票报价…这一切都离不开WebSocket的魔力&#x1f4ab;。…

LT6911UXE HDMI 2.0 至双端口 MIPI DSI/CSI,带音频 龙迅方案

1. 描述LT6911UXE 是一款高性能 HDMI2.0 至 MIPI DSI/CSI 转换器&#xff0c;适用于 VR、智能手机和显示应用。HDMI2.0 输入支持高达 6Gbps 的数据速率&#xff0c;可为4k60Hz视频提供足够的带宽。此外&#xff0c;数据解密还支持 HDCP2.3。对于 MIPI DSI / CSI 输出&#xff0…

零基础HTML教程(30)--迈入HTML5新时代

文章目录 1. 从H4时代到H5时代2. 属性值可以不用引号3. 标签使用大小写均可4. 部分属性值可以省略5. 浏览器支持情况6. 小结 1. 从H4时代到H5时代 之前讲的29篇HTML教程&#xff0c;内容基本都是H4时代就有的。 随着时代的发展&#xff0c;H4多少有点不够用&#xff0c;所以H…

历届试题 买不到的数目

历届试题 买不到的数目 时间限制&#xff1a;1.0s 内存限制&#xff1a;256.0MB 问题描述 小明开了一家糖果店。他别出心裁&#xff1a;把水果糖包成4颗一包和7颗一包的两种。糖果不能拆包卖。 小朋友来买糖的时候&#xff0c;他就用这两种包装来组合。当然有些糖果…

pyQt5 和 Qt Designer 实现登录注册案例

Qt Designer 设计页面: 通过 PyQt5 手写 1. 先引入用到的库 from PyQt5.QtWidgets import * import sys 2. 创建应用,窗口, 设置窗口 # 创建应用 app QApplication(sys.argv) # 创建窗口 w QWidget()# 设置窗口标题 w.setWindowTitle("注册登录")# 展示 w.sho…

HaLo-NeRF:利用视觉和语言模型对场景的精准定位和细粒度语义理解

包含大量摄影师拍摄的照片的互联网图像集有望实现对大型旅游地标的数字探索。然而&#xff0c;先前的工作主要集中在几何重建和可视化上&#xff0c;忽略了语言在为导航和细粒度理解提供语义界面方面的关键作用。 项目&#xff1a;HaLo-NeRF: Learning Geometry-Guided Semant…

LeetCode - 129双周赛

目录 一&#xff0c;3127. 构造相同颜色的正方形 二&#xff0c;3128. 直角三角形 三&#xff0c;3129. 找出所有稳定的二进制数组 I ​编辑 四&#xff0c;3130. 找出所有稳定的二进制数组 II 一&#xff0c;3127. 构造相同颜色的正方形 本题就是问在一个3x3的正方形中是…

2024.4.25 LoadRunner 测试工具详解 —— Controller Analysis

目录 Controller 的使用 创建场景 Controller 快捷方式创建场景 VUG 针对写好脚本创建场景 场景设计 设计初始化 设计启动机制 设计性能测试脚本的执行时间 设计虚拟用户退出机制 场景运行 添加监控指标至图标格区域 Analysis 的使用 汇总报告 测试报表 吞吐量图 …

仿9377登录注册页面源码分享

LOGO在image里面修改,名字这些有记事本打开修改 仿9377登录注册页面源码分享

《HelloGitHub》第 97 期

兴趣是最好的老师&#xff0c;HelloGitHub 让你对编程感兴趣&#xff01; 简介 HelloGitHub 分享 GitHub 上有趣、入门级的开源项目。 github.com/521xueweihan/HelloGitHub 这里有实战项目、入门教程、黑科技、开源书籍、大厂开源项目等&#xff0c;涵盖多种编程语言 Python、…

【Spark】读取本地文件

最近有一个需求&#xff0c;spark任务读取本地csv文件&#xff0c;拼接成rk之后再去hbase取值进行后续处理。搞了好久都没能解决&#xff0c;记录一下解决思路如下&#xff1a; 1、写入临时文件 spark可以读取本地文件&#xff0c;但打成jar包之后不会自动读取jar包中的文件&…

《Python语言科研绘图与学术图表绘制从入门到精通》解锁Python语言绘图魅力,让数据可视化成为你的科研利器!

本书特点 1.零基础高效入门&#xff1a;通过软件操作、实战案例及图文、代码结合的方式&#xff0c;实现从入门到精通的快速学习。 2.掌握多元科研绘图&#xff1a;涵盖科研绘图基础、各类图形绘制技巧&#xff0c;包括变量、极坐标、2D、3D及地理信息可视化等。 3.实用与艺术…