【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芯片。经过完整而彻底的重新设计…...
Gemini3.1Pro写作教练全攻略
2026 年,写作工具的使用方式已经发生了明显变化。过去很多人把大模型当成“代写工具”,但真正高效、长期可持续的用法,其实是把它当成个人写作教练:帮你拆选题、理结构、改表达、做复盘,而不是直接替你完成所有内容。最…...
LinkSwift:八大网盘直链下载助手终极指南,告别客户端束缚![特殊字符]
LinkSwift:八大网盘直链下载助手终极指南,告别客户端束缚!🚀 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百…...
基于Vagrant的Claude本地部署:自动化AI开发环境搭建指南
1. 项目概述:一个让Claude在本地“安家”的Vagrant包装器 如果你和我一样,是个喜欢在本地环境折腾各种AI工具的开发人员,那你肯定对Claude这个强大的语言模型不陌生。但官方提供的使用方式往往受限于网络环境、API调用成本或者隐私顾虑&…...
如何用PyWxDump破解微信数据解析的三大技术壁垒:从困境到突破的完整指南
如何用PyWxDump破解微信数据解析的三大技术壁垒:从困境到突破的完整指南 【免费下载链接】PyWxDump 删库 项目地址: https://gitcode.com/GitHub_Trending/py/PyWxDump 微信数据解析一直是个技术难题,就像试图打开一个不断变换密码的智能保险箱。…...
【信息科学与工程学】【物理/化学科学和工程技术】知识体系018 第十八篇 界面科学01 界面物理
界面科学知识体系分级分类列表 概述 界面科学是研究两相之间界面(表面)现象、性质、过程和规律的交叉学科。本列表系统整理了界面科学领域的核心概念、理论、技术和应用,涵盖从基础理论到前沿应用的完整知识体系。 界面科学知识体系分类表格...
突发模式光功率监控技术解析与实现
1. 突发模式光功率监控的技术挑战与解决方案在光通信系统中,发射功率监控是确保模块稳定运行的关键技术。传统连续模式下的监控方案通过简单滤波即可获取平均值,但在突发模式(Burst Mode)应用中,由于信号激活时间短且动…...
ghpm:GitHub仓库包管理器,一键安装管理开源工具
1. 项目概述:一个为GitHub仓库量身打造的包管理器如果你和我一样,日常开发中重度依赖GitHub,那你肯定遇到过这样的场景:看到一个非常棒的仓库,想把它当成一个“包”或者“工具”安装到本地,或者集成到自己的…...
开源协作平台集成结果导向管理:公益项目数字化解决方案
1. 项目概述与核心价值如果你在非营利组织、国际发展或公益项目管理领域工作,那么“结果导向管理”这个词对你来说一定不陌生。它听起来很专业,但实际操作起来,往往伴随着一堆令人头疼的表格、模糊的指标和难以追踪的进展。今天我想分享一个我…...
Windows平台Android开发环境自动化部署:ADB与Fastboot驱动智能安装工具技术解析
Windows平台Android开发环境自动化部署:ADB与Fastboot驱动智能安装工具技术解析 【免费下载链接】Latest-adb-fastboot-installer-for-windows A Simple Android Driver installer tool for windows (Always installs the latest version) 项目地址: https://gitc…...
Taotoken用量看板如何帮助开发者清晰掌握消费明细
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 Taotoken用量看板如何帮助开发者清晰掌握消费明细 对于使用大模型API的开发者而言,成本控制与预算管理是项目持续运营的…...
