【Linux】第一个小程序——进度条实现

让我们对这篇文章进行伪原创处理,保持文章的大意不变,同时保留图片的位置和原始格式。

【Linux】第一个小程序——进度条实现

前言

在之前的学习中,我们已经掌握了vim编辑器、gcc/g++的使用以及make/makefile工具的应用。今天,我们将利用这些知识在Linux上编写第一个小程序——进度条。在实现进度条之前,我们需要先了解两个关键概念。

回车与换行的区别

在Linux系统中,是两个重要的转义字符,它们分别代表换行符和回车符,具有不同的功能和使用场景。

(换行符):【定义】表示换行符,英文全称为newline,控制字符为LF(Line Feed)。它将光标移动到下一行的开头,常用于分隔文本的不同行。【功能】在Linux系统中,用于表示文本的换行。当输入新的字符时,它们会在新的一行上输出,使得文本内容更加清晰易读。

(回车符):【定义】表示回车符,英文全称为return,控制字符为CR(Carriage Return)。它将光标移动到当前行的开头,但不会移动到下一行。【功能】在Linux系统中,用于在同一行上连续输出不同的内容。如果有新的字符输入,它们将覆盖已存在的字符。这使得在同一行内更新文本内容成为可能。

的主要功能是换行,将光标移动到下一行的开头;而的主要功能是回车,将光标移动到当前行的开头。

行缓冲区的概念

在Linux中,行缓冲区是一种用于存储输出数据的缓冲机制,直到满足特定条件后才将数据发送出去。行缓冲区按行存储数据,只有当输出数据中包含换行符时,才会发送数据。

这种缓冲机制对于需要批量输出的场景非常有用,可以提高效率。同时,我们也可以使用特定的函数来刷新缓冲区,强制将缓冲区中的数据发送出去。

在动态显示文本进度条时,我们利用的是回滚而非换行,因为无法满足输出数据的条件,这时我们需要借助fflush(stdout);函数。

进度条代码

代码语言:javascript代码运行次数:0

运行复制“`javascript#include#include#includeint main(){ //进度条代码 //1.数组存放字符 char bar[101];//最后存放/0 memset(bar, ‘#’, 100); //旋转字符数组 char label[4] = “-|/”;//反斜杠要两个进行转义 //2.循环打印 int i = 0; while (i

我们可以在Linux上使用vim编辑器创建progress.c文件,将上述进度条代码写入其中,然后利用make/makefile工具和gcc编译器将progress.c编译成可执行文件progress。在命令行中输入./progress即可运行该程序,结果如下:

【Linux】第一个小程序——进度条实现

清理文件时,我们可以使用make clean命令删除文件:

【Linux】第一个小程序——进度条实现

如果需要重新编译progress.c文件,我们也可以使用make命令来实现:

【Linux】第一个小程序——进度条实现

Makefile文件内容如下:

【Linux】第一个小程序——进度条实现

彩色进度条

在C语言中,直接进行彩色输出并不是标准的一部分,因为C语言本身不支持这种特性。然而,如果你在控制台环境下编写程序,并且目标环境如Linux或某些支持ANSI转义码的系统,你可以利用ANSI escape codes(ANSI转义序列)来模拟颜色输出。

假设你想在控制台上打印一段带颜色的文字,例如一条红色的消息”Hello, World!”,你可以这样写:

代码语言:javascript代码运行次数:0

运行复制“`javascript#include int main() { if (isatty(fileno(stdout))) { // 检查是否是终端 printf(“[31m”); // 设置红色字体 printf(“Hello, World![0m”); // 打印消息并恢复默认颜色 } else { printf(“Hello, World!”); // 对于非终端设备,如文件,直接打印纯文本 } return 0;}

在这个例子中,如果程序在终端上运行,它会显示红色的”Hello, World!”;如果不是终端(如通过重定向输出到文件),则只显示普通的白色文字。

百度作家平台 百度作家平台

百度小说旗下一站式AI创作与投稿平台。

百度作家平台 146 查看详情 百度作家平台

对于颜色,通常会用到以下几种代码:

前景色:

黑色: [30m红色: [31m绿色: [32m黄色: [33m蓝色: [34m青色: [36m紫色: [35m白色: [37m

背景色:

黑色: [40m红色: [41m绿色: [42m黄色: [43m蓝色: [44m青色: [46m紫色: [45m白色: [47m

结束颜色设置: [0m[0m (等效)

当你想要结束颜色输出时,可以使用[0m来清除所有设置。但是请注意,这取决于终端是否支持这些转义码,以及用户终端配置。在Windows控制台上,由于其默认不支持ANSI转义码,上述方法可能无法生效。

因此,对于进度条代码,我们可以将其设置为我们喜欢的颜色,只需要在循环打印前后设置和取消字体颜色,代码如下:

【Linux】第一个小程序——进度条实现

然后我们使用make命令重新编译progress.c源文件:

【Linux】第一个小程序——进度条实现

运行结果如下:

【Linux】第一个小程序——进度条实现

模拟真实下载速度的进度条

我们需要使用随机数来模拟一次下载的进度,然后累加到进度条中,而不是一直维持一个速度下载,代码如下:

【Linux】第一个小程序——进度条实现

然后我们就可以使用随机数模拟下载了,结果如下:

【Linux】第一个小程序——进度条实现

然后就可以利用每次的下载量比例更新进度条,代码如下:

【Linux】第一个小程序——进度条实现

进度条打印效果如下:

【Linux】第一个小程序——进度条实现

以上就是【Linux】第一个小程序——进度条实现的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/457009.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月8日 01:50:32
下一篇 2025年11月8日 01:51:10

相关推荐

  • Golang简单微服务项目实战教程

    答案是使用Go语言构建一个包含HTTP接口、JSON处理和依赖注入的微服务示例。项目结构清晰,分为main.go、handler、service和model层,通过go mod初始化模块,利用net/http实现路由与JSON响应,定义User模型并模拟内存数据服务,最终在handler中注入Use…

    好文分享 2025年12月16日
    000
  • Golang跨平台交叉编译环境配置技巧

    Go语言通过设置GOOS和GOARCH环境变量实现跨平台交叉编译,如GOOS=linux GOARCH=arm64生成Linux ARM64版本,配合CGO_ENABLED=0可避免动态依赖,使用脚本可自动化构建多平台二进制文件。 Go语言原生支持跨平台交叉编译,无需依赖第三方工具链即可生成不同操作…

    2025年12月16日
    000
  • 如何判断两个切片是否引用同一块内存?

    本文旨在介绍如何使用 Go 语言判断两个切片是否指向同一块底层内存。通过 `reflect` 包提供的 `ValueOf` 和 `Pointer` 函数,我们可以获取切片的底层地址,并比较这些地址来确定切片是否共享相同的内存区域。本文将提供详细的代码示例和解释,帮助开发者理解和应用此方法。 在 Go…

    2025年12月16日
    000
  • Go 语言类型断言与类型转换详解

    本文旨在深入解析 Go 语言中类型断言与类型转换的区别与用法。通过具体示例,解释了为何类型转换可以在 `int` 和 `float64` 之间进行,而类型断言却会失败。本文将帮助读者理解 Go 语言的类型系统,避免在使用类型断言时出现错误。 在 Go 语言中,类型断言(Type Assertion)…

    2025年12月16日
    000
  • Go Web 服务器:实现静态文件(图片)服务指南

    go语言通过net/http包提供强大的静态文件服务能力。本文将详细介绍如何利用http.fileserver和http.stripprefix函数,在go web服务器中高效地提供图片等静态资源,涵盖从web根路径到特定url路径的配置方法,并提供完整示例代码,帮助开发者快速构建功能完善的静态资源…

    2025年12月16日
    000
  • Golang WebSocket实时通信项目实战

    答案:使用Gorilla WebSocket库结合Go的并发模型实现高效实时通信,通过main.go升级连接,hub.go管理客户端与广播消息,client.go处理读写,前端HTML测试交互,构建可扩展的WebSocket服务。 用Golang实现WebSocket实时通信,核心在于利用goril…

    2025年12月16日
    000
  • Golang CI/CD环境集成与自动化测试应用

    答案:现代Golang项目通过CI/CD实现自动化测试与交付,以GitHub Actions为例,配置流水线可实现代码构建、静态检查、单元测试、覆盖率分析及容器化部署;结合golangci-lint、-race检测和goreleaser等工具提升质量与发布效率,关键在于完善测试策略与优化细节如缓存、…

    2025年12月16日
    000
  • 如何使用Golang开发命令行工具

    使用Golang开发命令行工具首选spf13/cobra库,通过cobra init和cobra add创建项目结构与子命令,在root.go和各子命令文件中定义全局或专属参数,利用Run函数实现逻辑,并通过go build或交叉编译生成可执行文件,结合Makefile与GitHub Release…

    2025年12月16日
    000
  • DevOps流程优化与持续交付实践

    DevOps通过自动化、协作与持续改进实现高效交付。构建CI/CD流水线覆盖代码提交至部署全过程,集成测试与质量检查确保代码可靠性,结合Jenkins等工具实现流程可视化;采用Docker和Kubernetes保障环境一致性,实施蓝绿部署降低发布风险;通过ELK、Prometheus等监控体系建立反…

    2025年12月16日
    000
  • Golang UDP广播通信开发实践

    UDP广播可用于局域网设备发现,Golang通过net包实现高效通信。1. 发送端需创建UDP连接并启用广播选项,向255.255.255.255等广播地址周期发送消息;2. 接收端绑定指定端口监听,使用ReadFromUDP获取数据及来源;3. 实际应用中应动态获取广播地址、结构化消息内容,并在独…

    2025年12月16日
    000
  • 如何在Golang中实现goroutine调度优化

    Go调度器基于GMP模型,通过合理控制并发、减少阻塞和锁竞争提升性能。1. P数量默认等于CPU核心数,避免长时间阻塞系统调用;2. 缩小锁范围,使用RWMutex或无锁结构优化争用;3. 用worker pool或buffered channel限制goroutine数量;4. 大任务拆分,避免循…

    2025年12月16日
    000
  • Golang import语句如何管理依赖

    Go语言通过import引入包,依赖由go mod自动管理。使用go mod init初始化项目后,执行go build等命令会自动下载依赖并生成go.mod和go.sum文件;通过go get可升级或指定版本,go mod tidy清理未使用依赖,实现自动化、可重现的依赖管理。 Go语言通过imp…

    2025年12月16日
    000
  • Golang单元测试API接口签名验证示例

    首先实现HMAC-SHA256签名生成与验证逻辑,然后编写单元测试验证相同参数签名一致性、正确性及防篡改能力,最后在HTTP接口中集成签名验证确保API安全。 在使用 Golang 开发后端服务时,API 接口的安全性非常重要。签名验证是一种常见的安全机制,用于防止请求被篡改或重放攻击。为了保证签名…

    2025年12月16日
    000
  • Golang构建文件上传下载服务示例

    答案是使用Golang标准库可快速实现文件上传下载。1. 创建main.go和uploads目录;2. 用net/http处理请求,ParseMultipartForm解析文件,io.Copy保存至uploads;3. 提供下载接口通过http.ServeFile返回文件。 用Golang构建一个简…

    2025年12月16日
    000
  • Docker中Golang开发环境构建实践

    选择合适Go镜像并配置多阶段构建,通过挂载目录实现热重载,预装开发工具提升效率,最终构建轻量安全的生产镜像。 在Docker中构建Golang开发环境,核心是利用容器实现依赖隔离、环境一致和快速部署。通过合理的镜像选择、目录挂载与多阶段构建,能高效支持本地开发与生产发布。 选择合适的Go基础镜像 D…

    2025年12月16日
    100
  • 如何使用Golang实现容器健康探针

    Golang服务通过HTTP或Exec探针实现健康检查,HTTP方式暴露/healthz和/readyz接口供Kubernetes调用,支持依赖检测,Exec方式则通过命令退出码判断状态。 在 Kubernetes 等容器编排平台中,健康探针(Liveness、Readiness 和 Startup…

    2025年12月16日
    000
  • Golang Prometheus告警规则配置与实践

    告警规则需准确反映Golang微服务的异常情况并避免误报。首先,在Prometheus的rules.yaml中定义告警组,每个规则包含唯一名称、PromQL表达式(如P95延迟、错误率、goroutine数量等)、持续时间(for字段,建议2-5分钟)及标签与注解;常用场景包括高请求延迟、高错误率、…

    2025年12月16日
    000
  • 内存与CPU监控性能优化实践

    答案:通过监控内存与CPU使用情况,结合JVM工具、Prometheus、Arthas等手段,识别内存泄漏、高GC频率及CPU热点方法,优化对象生命周期、缓存机制与算法复杂度,并集成Micrometer、Zabbix等平台实现告警与报告,保障系统高性能稳定运行。 在现代应用系统中,内存与CPU的使用…

    2025年12月16日
    000
  • Golang测试语法与用例编写实践

    Go语言通过testing包和go test命令支持单元与性能测试,测试文件以_test.go结尾,测试函数需以Test开头并接收testing.T参数;推荐使用表驱动测试组织多用例,提升覆盖率与可维护性,如TestDivide中遍历输入输出对并用t.Run命名子测试;性能测试以Benchmark开…

    2025年12月16日
    000
  • Golang Web表单输入校验与安全实践

    答案:Go语言中需通过结构体绑定、标签校验、类型安全转换和上下文清理来防御恶意输入。使用validator.v9实现字段规则校验,结合预处理语句防SQL注入,输出转义防XSS,添加token防CSRF,敏感字段从session或JWT提取,并自定义密码强度等校验逻辑,封装中间件统一处理错误响应,确保…

    2025年12月16日
    000

发表回复

登录后才能评论
关注微信