【Hello Linux】Linux环境下写的第一个程序 -- 进度条
作者:@小萌新
专栏:@Linux
作者简介:大二学生 希望能和大家一起进步!
本篇博客简介:写出Linux中的第一个小程序 进度条
进度条小程序
- 行缓冲区概念
- \r 和 \n
- 进度条代码和演示
行缓冲区概念
我们首先用两段代码来感受下行缓冲区的存在

上面的这段代码会输出什么?
毫无疑问 它会输出hello world之后换行 并且还会休眠三秒 之后结束程序
运行结果也符合我们的预期

可是如果我们将代码改成这样子呢?

去掉了换行符 那么代码会打印出hello world之后不换行然后休眠三秒结束程序嘛
我们可以编译之后运行试试
我们可以发现并没有按照我们的预期运行 而是直接开始了三秒sleep

之后再打印出了hello world

那么这是为什么呢? 按照道理说顺序结构的运行应该是先打印再睡眠的啊
这里其实是因为行缓冲区的存在
我们的显示器对应的是行刷新
即当行被刷新(可以通过换行刷新) 或者被写满的时候才会被打印出来
而hello world既没有写满行 又没有刷新行缓冲区 所以自然不会被打印到显示器当中
\r 和 \n
- \n 换行 让光标下移一格
- \r 回车 让光标回到这一行的行首
当我们敲击键盘上的enter键的时候实际上就等于 /n + /r
那么有意思的部分就来了 既然/r是让光标回到这一行的行首
如果我们写下一个数之后立马使用/r回到这一行的行首继续写一个数
那么是不是这个数就被我们覆盖了呢?
其实这个问题的本质就是/r会不会刷新行缓冲区 如果不会那么前面写的数就会被后面写的数覆盖
我们写出下面的代码

最后的结果是这样子的

我们可以发现最后什么都没有打印
这是因为\r并不会刷新行缓冲区的缘故 如果想要将每个数字打印出来我们则需要一个行缓冲区刷新函数
这个函数就是 fflush(stdout)
加上这段代码之后我们再编译运行程序试试看

我们可以发现 这里它就变成了一个倒计时器了

进度条代码和演示
我们要设计一个进度条首先至少要有100个空间
我们的每个 ‘#’ 号对应着一个空间 有多少个 ‘#’ 也就代表着到了百分之几
我们首先写出下面的代码
其中 usleep的单位是纳秒 1毫秒 = 1000纳秒
所以50000纳秒 = 50毫秒
走100次也就是5000毫秒 也就是说这个程序会在5秒左右走完


这是这样子好像还是缺少点什么 我们尝试用两个框框把这个字符串框起来这样子好看一点
此外 我们可以在这框框外面加上一个框框 里面显示程序走了百分之多少了


此时这个进度条程序已经初具雏形了
如果我们还想要这个这个进度条是否在工作中则需要在它的最后加上一个旋转的小圈圈 如果这个圈圈还在旋转则表示仍然在加载中

这样子我们的进度条小程序就完成啦
源代码如下
1 #include <stdio.h>2 #include <string.h>3 #include <unistd.h>4 5 int main()6 {7 char pb[102];8 memset(pb,'\0',102);9 int i = 0;10 char arr[4];11 arr[0] = '\\';12 arr[1] = '|';13 arr[2] = '/';14 arr[3] = '-';15 while (i != 100)16 {17 pb[i] = '#';18 printf("[%-100s][%%%d][%c]\r",pb,i+1,arr[i%4]); 19 fflush(stdout);20 usleep(50000);21 i++;22 }23 return 0;24 }
相关文章:
【Hello Linux】Linux环境下写的第一个程序 -- 进度条
作者:小萌新 专栏:Linux 作者简介:大二学生 希望能和大家一起进步! 本篇博客简介:写出Linux中的第一个小程序 进度条 进度条小程序行缓冲区概念\r 和 \n进度条代码和演示行缓冲区概念 我们首先用两段代码来感受下行缓…...
【基础】性能测试,从0到实战(手把手教,非常实用)
一、性能基础 什么是性能测试--->本质? 基于协议来模拟用户发送的请求(业务模拟),对服务器形成一定负载。关注点:时间性能、空间性能与界面无关 性能测试分类 性能测试(狭义) 性能测试方法是通过模…...
07-Java异常分类以及处理机制
1.异常概念 Java标准库内建了一些通用的异常,这些类以Throwable为顶层父类。Throwable又派生出Error类和Exception类。 1.错误:是程序无法处理的错误,表示运行应用程序中较严重问题。大多数错误与代码编写者执行的操作无关,而表示…...
用到的C++的相关知识-----未完待续
文章目录前言一、vector函数的使用1.1 构造向量二、常用函数2.1 矩阵输出函数2.2 向量输出函数2.3 矩阵的使用2.4三、new的用法3.1 内存的四种分区3.2 new的作用3.33.4四、4.14.24.34.4总结前言 只是为方便学习,不做其他用途 一、vector函数的使用 有关的文章 C v…...
JavaScript刷LeetCode拿offer-贪心算法
前言 学习算法的时候,总会有一些让人生畏的名词,比方动态规划,贪心算法 等,听着就很难;而这一 part 就是为了攻破之前一直没有系统学习的 贪心算法; 有一说一,做了这些贪心题,其实…...
selenium
下载并安装selenium 安装:cmd中执行 pip install -i https://pypi.douban.com/simple selenium执行完成后 pip show selenium 可查看安装是否成功安装浏览器驱动,查看当前浏览器的版本选择合适的驱动并下载 chrome的链接:https://chromedrive…...
SpringMVC的视图
转发视图ThymeleafView若使用的视图技术为Thymeleaf,在SpringMVC的配置文件中配置了Thymeleaf的视图解析器,由此视图解析器解析之后所得到的是ThymeleafView。解析:当控制器方法中所设置的视图名称没有任何前缀时,此时的视图名称会…...
idea使用本地代码远程调试线上运行代码---windows环境
场景: 今天在书上看了一个代码远程调试的方法,自己本地验证了一下感觉十分不错!! windows环境: 启动测试jar包:platform-multiappcenter-base-app-1.0.0-SNAPSHOT.jar 测试工具:postman,idea 应…...
简单记录简单记录
目录1.注册Gmail2.注册ChatGPT3.验证“真人”使用4.开始使用1.注册Gmail 第一步先注册一个谷歌邮箱,你也可以使用微软账号,大部分人选择使用gmail。 申请谷歌邮箱 选择个人用途创建账号即可。 📌温馨提示: 你直接使用guo内的网…...
源码系列 之 ThreadLocal
简介 ThreadLocal的作用是做数据隔离,存储的变量只属于当前线程,相当于当前线程的局部变量,多线程环境下,不会被别的线程访问与修改。常用于存储线程私有成员变量、上下文,和用于同一线程,不同层级方法间传…...
C语言入门(1)——特点及关键字
1、C特点及与Java区别 1.1、C特点 面向过程 一般用于嵌入式开发、编写最底层的程序、操作系统 可以直接操作内存 可以封装动态库 不容易跨平台 有指针 可以直接操作串口 线程更加灵活 和硬件打交道速度是最快的 1.2、和Java区别 C是C的增强版,增加了一些新的特性&…...
react中useEffect和useLayoutEffect的区别
布局上 useEffect在浏览器渲染完成后执行useLayoutEffect在DOM更新后执行 特点 useLayoutEffect 总是比 useEffect 先执行;useLayoutEffect与componentDidMount、componentDidUpdate调用时机相同,都是在DOM更新后,页面渲染前调用࿱…...
NoSQL(非关系型数据库)与SQL(关系型数据库)的差别
目录 NoSQL(非关系型数据库)与SQL(关系型数据库)的差别 1.数据结构:结构化与非结构化 2.数据关联:关联性与非关联性 3.查询方式:SQL查询与非SQL查询 4.事务特性:ACID与BASE 分析ACID与BASE的含义: 5.存储方式&am…...
new bing的申请与使用教程
文章目录新必应申请新必应免代使用教程总结新必应申请 下载安装 Edge dev 版本,这个版本可以直接使用 对于没有更新的用户而言,不容易找到入口,所以我们直接使用 集成new bing的dev版本 Edge dev 下载链接:https://www.microso…...
yaml配置文件
最近在写代码,发现随着网络的增加,代码变得越来越冗余,所以就想着写一个网络的配置文件,把网络的配置放到一个文件中,而不再主函数中,这样代码开起来就好看了,调试的时候也方便了。之前写过一篇…...
284. 顶端迭代器
请你在设计一个迭代器,在集成现有迭代器拥有的 hasNext 和 next 操作的基础上,还额外支持 peek 操作。 实现 PeekingIterator 类: PeekingIterator(Iterator nums) 使用指定整数迭代器 nums 初始化迭代器。 int next() 返回数组中的下一个元…...
自学前端最容易犯的10个的错误,入门学前端快来看看
在前端学习过程中,有很多常见的误区,包括过度关注框架和库、缺乏实践、忽视算法和数据结构、忽视浏览器兼容性、缺乏团队合作经验、忽视可访问性、重构次数过多、没有关注性能、缺乏设计知识以及没有持续学习等。要避免这些误区,应该注重基础…...
【ADRC控制】使用自抗扰控制器调节起动机入口压力值
以前只知道工业控制中用的是PID控制,然而最近了解到实际生产中还在使用ADRC控制,而且使用效果还优于PID控制,遂找了几篇文献学习学习。 0 引言 自抗扰控制(Active Disturbances Rejection Controller,ADRC)…...
剑指 Offer Day2——链表(简单)
目录剑指 Offer 06. 从尾到头打印链表剑指 Offer 24. 反转链表剑指 Offer 35. 复杂链表的复制剑指 Offer 06. 从尾到头打印链表 原题链接:06. 从尾到头打印链表 最容易想到的思路就是先从头到尾打印下来,然后 reverse 一下,但这里我们使用递归…...
Final Cut Pro 10.6.5
软件介绍Final Cut Pro 10.6.5 已通过小编安装运行测试 100%可以使用。Final Cut Pro 10.6.5 破解版启用了全新的矩形图标,与最新的macOS Ventura设计风格统一,支持最新的macOS 13 文图拉系统,支持Apple M1/M2芯片。经过完整而彻底的重新设计…...
计及力累积效应电力变压器绕组短路强度与稳定性研究 电力变压器作为电网系统的电力转换枢纽
计及力累积效应电力变压器绕组短路强度与稳定性研究 电力变压器作为电网系统的电力转换枢纽,因短路冲击造成其损坏的事故时有发生,统计发现单次短路冲击有时并不会对绕组造成严重的损坏,但会存有难以检测的暗伤,经多次作用累积&am…...
智慧交通护栏识别 道路标识识别车道线识别 道路设施目标检测模型训练 交通设施巡检算法 yolo图像分割数据集第10607期
计算机视觉数据集数据集概览 类别:7类,涵盖道路设施相关目标图像数量:500格式:YOLO格式核心任务:目标检测数据集核心信息维度详情数据类别冷塑震荡标线漆、热塑性涂料、凸起式路面标线、橡胶减速带、单W型梁防撞护栏、…...
如何利用OpenCode实现高效专业的AI驱动开发工作流?
如何利用OpenCode实现高效专业的AI驱动开发工作流? 【免费下载链接】opencode 一个专为终端打造的开源AI编程助手,模型灵活可选,可远程驱动。 项目地址: https://gitcode.com/GitHub_Trending/openc/opencode 在当今快速迭代的软件开发…...
本地AI视频剪辑终极实战:用FunClip构建智能内容创作工作流
本地AI视频剪辑终极实战:用FunClip构建智能内容创作工作流 【免费下载链接】FunClip Open-source, accurate and easy-to-use video clipping tool, LLM based AI clipping intergrated || 开源、精准、方便的视频切片工具,集成了大语言模型AI智能剪辑功…...
STM32智能猪舍监控系统设计与实现
基于STM32的智能猪舍监控系统设计1. 项目概述1.1 系统背景现代养殖业正经历从传统人工管理向智能化管理的转型过程。在生猪养殖领域,环境参数如温湿度、空气质量、光照强度等对猪只健康生长具有决定性影响。传统人工监测方式存在响应滞后、精度不足等问题࿰…...
为什么AI时代需要Lightpanda这样的无头浏览器?揭秘9倍内存效率背后的技术革命
为什么AI时代需要Lightpanda这样的无头浏览器?揭秘9倍内存效率背后的技术革命 【免费下载链接】browser The open-source browser made for headless usage 项目地址: https://gitcode.com/GitHub_Trending/browser32/browser 在当今AI代理、自动化测试和大规…...
数组指针和二级指针之间的区别和用法
一.数组指针形为:int (*p)[x] NULL(x为所指向的一维数组的大小);p指向一个行向量(二维数组)的数组名。例如:int array[][3] {{1,1,2},{2,3,4}};int (*p)[3] array;遍历这个二维数组,可利用该指针来向函数…...
深度学习毕业设计题目实战指南:从选题到部署的完整技术路径
最近在帮学弟学妹们看毕业设计,发现一个挺普遍的现象:大家对深度学习的理论热情很高,但一到动手实现,就各种“翻车”。环境配一天,模型跑不动;好不容易跑起来,精度死活上不去;最后模…...
SDMatte镜像国产化适配:昇腾/海光平台移植可行性评估
SDMatte镜像国产化适配:昇腾/海光平台移植可行性评估 1. 项目背景与技术特点 SDMatte是一款专注于高质量图像抠图的AI模型,特别擅长处理复杂边缘和半透明物体的提取任务。该模型在电商、设计、内容创作等领域具有广泛应用价值,能够高效完成…...
Qwen3-1.7B应用案例:快速构建智能问答助手完整流程
Qwen3-1.7B应用案例:快速构建智能问答助手完整流程 1. 项目概述与准备 1.1 Qwen3-1.7B模型简介 Qwen3-1.7B是阿里巴巴开源的通义千问系列语言模型中的轻量级版本,具有17亿参数规模。该模型在保持较高推理性能的同时,对硬件资源需求相对友好…...
