【Linux】第一个小程序——进度条实现
发布时间 - 2025-07-20 00:00:00 点击率:次让我们对这篇文章进行伪原创处理,保持文章的大意不变,同时保留图片的位置和原始格式。
前言
在之前的学习中,我们已经掌握了vim编辑器、gcc/g++的使用以及make/makefile工具的应用。今天,我们将利用这些知识在Linux上编写第一个小程序——进度条。在实现进度条之前,我们需要先了解两个关键概念。
- 回车与换行的区别
在Linux系统中,\n和\r是两个重要的转义字符,它们分别代表换行符和回车符,具有不同的功能和使用场景。
\n(换行符):【定义】\n表示换行符,英文全称为newline,控制字符为LF(Line Feed)。它将光标移动到下一行的开头,常用于分隔文本的不同行。【功能】在Linux系统中,\n用于表示文本的换行。当输入新的字符时,它们会在新的一行上输出,使得文本内容更加清晰易读。
\r(回车符):【定义】\r表示回车符,英文全称为return,控制字符为CR(Carriage Return)。它将光标移动到当前行的开头,但不会移动到下一行。【功能】在Linux系统中,\r用于在同一行上连续输出不同的内容。如果有新的字符输入,它们将覆盖已存在的字符。这使得在同一行内更新文本内容成为可能。
✨\n的主要功能是换行,将光标移动到下一行的开头;而\r的主要功能是回车,将光标移动到当前行的开头。
- 行缓冲区的概念
在Linux中,行缓冲区是一种用于存储输出数据的缓冲机制,直到满足特定条件后才将数据发送出去。行缓冲区按行存储数据,只有当输出数据中包含换行符时,才会发送数据。
这种缓冲机制对于需要批量输出的场景非常有用,可以提高效率。同时,我们也可以使用特定的函数来刷新缓冲区,强制将缓冲区中的数据发送出去。
在动态显示文本进度条时,我们利用的是\r回滚而非换行,因为无法满足输出数据的条件,这时我们需要借助fflush(stdout);函数。
- 进度条代码
代码语言:javascript 代码运行次数:0
运行 复制 ```java
script
#include我们可以在Linux上使用vim编辑器创建progress.c文件,将上述进度条代码写入其中,然后利用make/makefile工具和gcc编译器将progress.c编译成可执行文件progress。在命令行中输入./progress即可运行该程序,结果如下:
清理文件时,我们可以使用make clean命令删除文件:
如果需要重新编译progress.c文件,我们也可以使用make命令来实现:
Makefile文件内容如下:
✨彩色进度条
在C语言中,直接进行彩色输出并不是标准的一部分,因为C语言本身不支持这种特性。然而,如果你在控制台环境下编写程序,并且目标环境如Linux或某些支持ANSI转义码的系统,你可以利用ANSI escape codes(ANSI转义序列)来模拟颜色输出。
假设你想在控制台上打印一段带颜色的文字,例如一条红色的消息"Hello, World!",你可以这样写:
代码语言:javascript 代码运行次数:0
运行 复制 ```javascript #include在这个例子中,如果程序在终端上运行,它会显示红色的"Hello, World!";如果不是终端(如通过重定向输出到文件),则只显示普通的白色文字。
对于颜色,通常会用到以下几种代码:
前景色:
- 黑色:
\033[30m - 红色:
\033[31m - 绿色:
\033[32m - 黄色:
\033[33m - 蓝色:
\033[34m - 青色:
\033[36m - 紫色:
\033[35m - 白色:
\033[37m
背景色:
- 黑色:
\033[40m - 红色:
\033[41m - 绿色:
\033[42m - 黄色:
\033[43m - 蓝色:
\033[44m - 青色:
\033[46m - 紫色:
\033[45m - 白色:
\033[47m
结束颜色设置: \033[0m 或 \x1b[0m (等效)
当你想要结束颜色输出时,可以使用\033[0m来清除所有设置。但是请注意,这取决于终端是否支持这些转义码,以及用户终端配置。在Windows控制台上,由于其默认不支持ANSI转义码,上述方法可能无法生效。
因此,对于进度条代码,我们可以将其设置为我们喜欢的颜色,只需要在循环打印前后设置和取消字体颜色,代码如下:
然后我们使用make命令重新编译progress.c源文件:
运行结果如下:
✨模拟真实下载速度的进度条
我们需要使用随机数来模拟一次下载的进度,然后累加到进度条中,而不是一直维持一个速度下载,代码如下:
然后我们就可以使用随机数模拟下载了,结果如下:
然后就可以利用每次的下载量比例更新进度条,代码如下:
进度条打印效果如下:
# linux
# windows
# c语言
# 工具
# ai
# 区别
# JavaScript
# if
# while
# include
# printf
# char
# int
# 循环
# vim
# 进度条
# 可以使用
# 换行
# 随机数
# 你可以
# 换行符
# 我们可以
# 英文
# 不支持
# 主要功能
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
公司网站制作价格怎么算,公司办个官网需要多少钱?
Laravel如何使用软删除(Soft Deletes)功能_Eloquent软删除与数据恢复方法
如何获取PHP WAP自助建站系统源码?
Python结构化数据采集_字段抽取解析【教程】
,怎么在广州志愿者网站注册?
Laravel全局作用域是什么_Laravel Eloquent Global Scopes应用指南
网站制作免费,什么网站能看正片电影?
LinuxCD持续部署教程_自动发布与回滚机制
如何确保FTP站点访问权限与数据传输安全?
如何在云虚拟主机上快速搭建个人网站?
JS去除重复并统计数量的实现方法
laravel怎么配置和使用PHP-FPM来优化性能_laravel PHP-FPM配置与性能优化方法
Laravel怎么防止CSRF攻击_Laravel CSRF保护中间件原理与实践
b2c电商网站制作流程,b2c水平综合的电商平台?
如何在万网自助建站中设置域名及备案?
如何在沈阳梯子盘古建站优化SEO排名与功能模块?
高端建站如何打造兼具美学与转化的品牌官网?
Swift中循环语句中的转移语句 break 和 continue
如何在阿里云虚拟主机上快速搭建个人网站?
Laravel Facade的原理是什么_深入理解Laravel门面及其工作机制
Midjourney怎样加参数调细节_Midjourney参数调整技巧【指南】
Laravel怎么使用Collection集合方法_Laravel数组操作高级函数pluck与map【手册】
zabbix利用python脚本发送报警邮件的方法
Laravel如何创建和注册中间件_Laravel中间件编写与应用流程
如何快速选择适合个人网站的云服务器配置?
韩国服务器如何优化跨境访问实现高效连接?
如何快速搭建高效服务器建站系统?
宙斯浏览器视频悬浮窗怎么开启 边看视频边操作其他应用教程
北京的网站制作公司有哪些,哪个视频网站最好?
Laravel如何使用集合(Collections)进行数据处理_Laravel Collection常用方法与技巧
Laravel定时任务怎么设置_Laravel Crontab调度器配置
如何用美橙互联一键搭建多站合一网站?
详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)
中国移动官方网站首页入口 中国移动官网网页登录
ChatGPT怎么生成Excel公式_ChatGPT公式生成方法【指南】
详解Oracle修改字段类型方法总结
湖南网站制作公司,湖南上善若水科技有限公司做什么的?
php中::能调用final静态方法吗_final修饰静态方法调用规则【解答】
DeepSeek是免费使用的吗 DeepSeek收费模式与Pro版本功能详解
安克发布新款氮化镓充电宝:体积缩小 30%,支持 200W 输出
js实现获取鼠标当前的位置
Laravel如何与Pusher实现实时通信?(WebSocket示例)
大型企业网站制作流程,做网站需要注册公司吗?
使用C语言编写圣诞表白程序
高端建站三要素:定制模板、企业官网与响应式设计优化
高性能网站服务器配置指南:安全稳定与高效建站核心方案
Laravel的.env文件有什么用_Laravel环境变量配置与管理详解
重庆市网站制作公司,重庆招聘网站哪个好?
Laravel如何处理JSON字段的查询和更新_Laravel JSON列操作与查询技巧
如何使用 jQuery 正确渲染 Instagram 风格的标签列表

