Linux(6)——第一个小程序(进度条)

news2025/7/23 15:50:00

目录

一、行缓冲区的概念

二、\r与\n

三、进度条代码书写与展示

1.如何表示进度条是在加载的

2.整体框架

3.书写

3.1makefile:

3.2process.h: 

3.3process.c:

3.4main.c:

3.5美化 


一、行缓冲区的概念

首先,我们来见一见行缓冲区,对比下面两个代码就可以理解了。

这个的结果毋庸置疑了就是:

那么如果我们修改一下这个代码呢,比如这样:

结果又如何呢,我们运行一下:

我们惊奇的发现,居然和原来完全不一样,这个代码显示的是先休眠3秒再打印出hello world。

这也就说明了有行缓冲区的存在。

显示器对应的是行刷新,即当缓冲区当中遇到\n'或是缓冲区被写满才会被打印出来,而在第二份带码当中并没有\n,所以字符串hello world先被写到缓冲区当中去了,然后休眠3秒后,直到程序运行结束时才将hello world打印到显示器当中。 

二、\r与\n

\r:回车,让光标回到行首(类似于之前的打字机)

\n:换行,让光标来到下一行

而我们电脑键盘上面的enter键就是\r+\n(老式键盘的enter键的形状也说明了这一点)

既然是是使光标回到本行行首,那么如果我们向显示器上写了一个数之后再让光标回到本行行首,然后再写一个数,不就相当于将前面一个数字覆盖了吗?
但这里有一个问题:不使用"\n’进行换行怎么将缓冲区当中数据打印出来?
这里我们可以使用fflush函数,该函数可以刷新缓冲区,即将缓冲区当中的数据刷新当显示器当中。基于这个特性我们可以编写一个倒计时的程序。 

光标回到行首再打印就实现了倒计时的效果:

三、进度条代码书写与展示

根据上面的基本知识,我们就可以写一个进度条的代码了。

1.如何表示进度条是在加载的

有的时候们在下载东西的时候,进度条可能会卡着不动,但是确实是在运行,我们该怎么表示呢?

这里我梦可以设置一个标记在随机改变形状,就可以知道是不是在运行了。

例如:

const char *lable="|/-\\"; 

在这几个符号之间切换。

2.整体框架

我们为了实现下载功能,我们可以模拟实现一个下载的场景,设置总的下载数据的值,然后设置speed值,用休眠时间模拟下载的速度。for()循环模拟正在下载数据。

3.书写

3.1makefile:

实现多文件编译

3.2process.h: 

3.3process.c:

3.4main.c:

效果展示:

3.5美化 

如果你觉得这样有点单调,你也可以加上颜色,关于ANSI颜色转义序列可以到网上找到。

改进后:

效果展示:

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

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

相关文章

CentOS:搭建国内软件repository,以实现自动yum网络安装

centosgit仓库_寂寞沙冷州的技术博客_51CTO博客 yum 很慢 centos yum安装慢_mob64ca1417b0c6的技术博客_51CTO博客 yum配置,文件,命令详解-CSDN博客 yum仓库简介_yum库是什么-CSDN博客 rootwww:/etc/yum.repos.d# pwd /etc/yum.repos.d ###创建下面这个.…

[Git] 认识 Git 的三大区域 文件的修改和提交

文章目录 认识 Git 的三大区域:工作区、暂存区、版本库工作区、暂存区、版本库的关系流程图解 (概念) 将文件添加到仓库进行管理:git add 和 git commit场景一:第一次添加文件到仓库查看提交历史:git log(进阶理解&…

RISC-V 开发板 MUSE Pi Pro USB 测试(3.0 U盘,2.0 UVC摄像头)

视频讲解: RISC-V 开发板 MUSE Pi Pro USB 测试(3.0 U盘,2.0 UVC摄像头) 总共开发板有4个USB的A口,1个USB的TypeC口,我们插上两个USB3.0的U盘和一个USB2.0的UVC摄像头来进行测试 lsusb -tv 可以看到有3个US…

【520 特辑】用 HTML/CSS/JavaScript 打造浪漫炫酷的表白网页

一、前言 在 520 这个充满爱意的日子里,程序员该如何用代码表达浪漫?本文将分享一个结合动画特效与交互设计的 520 表白网页案例,通过 HTML/CSS/JavaScript 实现动态爱心、渐变背景、浮动文字等炫酷效果,手把手教你用技术传递心意…

小米2025年校招笔试真题手撕(二)

一、题目 给一个长度为n的序列和一个整数x,每次操作可以选择序列中的一个元素,将其从序列中删去,或者将其值加一。 问至少操作多少次,可以使操作后的序列(可以为空)中数字之和是x的倍数。 输入描述&#…

部署Gitlab-CE with Docker私有云环境

应用环境 Ubuntu 20.04.6 LTS (GNU/Linux 5.15.0-139-generic x86_64) Docker version 28.1.1, build 4eba377 文章目录 拉取容器镜像生成Run脚本参数解读实例脚本环境配置管理员密码遗忘服务邮箱配置邮件测试 运维问题集锦(1) 端口映射关系(2) 服务日志(3) 分支受保护 项目操作…

拉普拉斯高斯(LoG)滤波器掩模的注意事项

目录 问题: 解答: 一、高斯函数归一化:消除幅度偏差 1. 归一化的定义 2. 为何必须归一化? 二、拉普拉斯系数和为零:抑制直流项干扰 1. 拉普拉斯算子的特性 2. 系数和不为零的后果 三、直流项如何影响零交叉点&…

铠大师:让用户畅享多元应用,助力鸿蒙生态发展

在全球信息技术产业格局加速重构的背景下,中国科技力量正以开放包容的姿态重塑操作系统生态范式。 5月19日,华为在成都举办的nova14系列及鸿蒙电脑新品发布会上,正式对外发布搭载了鸿蒙系统的笔记本电脑HUAWEI MateBook Pro与HUAWEI MateBoo…

基于aspnet,微信小程序,mysql数据库,在线微信小程序汽车故障预约系统

详细视频:【基于aspnet,微信小程序,mysql数据库,在线微信小程序汽车故障预约系统。-哔哩哔哩】 https://b23.tv/zfqLWPV

如何使用AI搭建WordPress网站

人工智能正迅速成为包括网页设计在内的许多行业在其功能设置中添加的一种工具。在数字设计和营销领域,许多成熟的工具都在其产品中添加了人工智能功能。WordPress 也是如此。作为目前最流行的网站建设工具之一,WordPress 的人工智能插件越来越多也就不足…

Java并发编程:全面解析锁策略、CAS与synchronized优化机制

一、六种锁策略场景化解析 1. 乐观锁 vs 悲观锁:图书馆借书的两种策略 核心差异:对资源是否会被抢占的预期不同。 乐观锁(假设冲突概率低) → 行为:直接去书架上拿书(围绕加锁要做的工作更少&#xff09…

2025第三届黄河流域网络安全技能挑战赛--Crypto--WriteUp

2025第三届黄河流域网络安全技能挑战赛–Crypto–WriteUp Crypto sandwitch task from Crypto.Util.number import * import gmpy2 flag bflag{fake_flag} assert len(flag) 39 p getPrime(512) q getPrime(512) n p * q e 0x3 pad1 beasy_problem pad2 bHow_to_so…

[爬虫知识] IP代理

相关实战案例:[爬虫实战] 代理爬取:小白也能看懂怎么用代理 相关爬虫专栏:JS逆向爬虫实战 爬虫知识点合集 爬虫实战案例 引言:爬虫与IP封锁的攻防战 对网络爬虫而言,遇到的一个较棘手的问题就是封IP:请…

6个月Python学习计划 Day 1 - Python 基础入门 开发环境搭建

6个月Python学习计划:从入门到AI实战(前端开发者进阶指南) 🎯 今日目标 理解 Python 的背景和用途安装 Python 开发环境熟悉基本语法:变量、数据类型、打印输出动手编写第一个 Python 程序 🧠 学习内容详…

GraphPad Prism工作表的基本操作

《2025新书现货 GraphPad Prism图表可视化与统计数据分析(视频教学版)雍杨 康巧昆 清华大学出版社教材书籍 9787302686460 GraphPadPrism图表可视化 无规格》【摘要 书评 试读】- 京东图书 GraphPad Prism中包含5种工作表,每种工作表的基本操…

成年后还能学习多少知识,由大脑的这个数量决定

撰文|Anne Trafton 编译|郑添惺 审校|clefable 麻省理工学院(MIT)的一些神经科学家发现,成年的大脑中含有数百万个“静默突触”(silent synapses)。它们是神经元之间未成熟的神经突…

MySQL连接错误解决方案:Can‘t connect to MySQL server on ‘localhost‘ (10038)

错误描述 当您尝试连接MySQL数据库时,可能会遇到以下错误提示: 这个错误表明客户端无法连接到本地MySQL服务器。 可能的原因 MySQL服务未启动 MySQL配置问题 防火墙或安全软件阻止连接 端口被占用或未正确配置 网络连接问题 解决方案 方法一&am…

CSS相关知识

1.清除浮动的方法 2.定位 静态定位相当于标准流 相对定位不脱离文档流,仍然占据原来的位置(最频繁的作用是给绝对定位当爹) 绝对定位脱离文档标准流,不再占有原来位置 3.BFC 1. 解决浮动元素导致的父容器高度塌陷 2. 阻止相邻元…

AI扫描王APP:高效便捷的手机扫描工具,让生活更智能

AI扫描王APP是一款功能强大的手机扫描软件,专为追求高效、便捷的用户设计。它不仅支持文字提取和扫描翻译,还能进行测量,满足用户在不同场景下的需求。无论是办公、学习还是日常使用,AI扫描王都能帮助你快速完成任务,节…

《仿盒马》app开发技术分享-- 原生地图展示(端云一体)

开发准备 上一节我们实现了获取当前用户的位置,并且成功的拿到了经纬度,这一节我们就要根据拿到的经纬度,结合我们其他的知识点来实现地图的展示。 功能分析 地图的展示,我们需要在管理中心先给我们对应的应用开启地图api功能&…