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

这篇具有很好参考价值的文章主要介绍了【Linux】第一个Linux小程序——进度条。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

        今天为大家带来一篇关于在Linux上编写的进度条小程序的博客。

正文

        我们在日常生活中使用电子产品时,经常会遇到加载的过程,这时候这些加载界面总是会附带有一些进度条,这些进度条是加载进度的可视化图形,这篇文章我们就在Linux系统下编写一个进度条,主要关注进度条程序的原理和模拟应用。

缓冲区

        在写进度条之前,我们先来了解一下关于C语言中的缓冲区的知识。

        首先我们看看下面这段代码的结果:

#include <stdio.h>
#include <unistd.h>

int main()
{
    printf("Hello world!");
    while(1) sleep(1);
    return 0;
}

        结果如下:

【Linux】第一个Linux小程序——进度条,【Linux】Linux操作系统,linux,运维,centos,学习

         我们可以发现,上面的代码并没有输出Hello world! 而是一直在睡眠,我们知道,C语言在主函数中是按照从上往下的顺序来执行语句的,那么这里为什么没有先输出而是一直在睡眠呢?

        这是C语言中的缓冲区在起作用,缓冲区可以提高CPU的效率,它是内存空间中预留的存储空间,这些存储空间用来缓冲输入或输出的数据。

  其中,缓冲区根据其对应的是输入设备还是输出设备,分为输入缓冲区和输出缓冲区。

        我们的Hello world就是被存储在输出缓冲区中,由于我们使用的输出函数 printf() 对应的缓冲类型为行缓冲,在这种情况下,填满缓冲区、有换行符'\n'或者调用fflush函数强制刷新缓冲区会立即输出。(除此之外,程序结束时也会进行刷新缓冲区)而我们写在上面的输出语句没有达成刷新缓冲区的条件,于是就产生了以上的结果。

        所以我们可以使用fflush函数强制刷新缓冲区,或者在输出的字符串之后加上'\n'来保证这种情况下的正常输出。

进度条

        我们现在正式开始编写一个进度条小程序,首先,我们先关注进度条的特点:代表进度的符号都聚集于一行并且其数量一般从左向右不断增加,而且常常会标注进度的百分比表示。

        那么我们首先实现进度条的主体部分,也就是在某一行中不断向右增长的条状物。要实现这个部分,我们需要使用到上面关于缓冲区的知识:由于进度条始终在同一行中展示(也就是字符串中没有换行),我们的每次输出都必须要刷新缓冲区。除此之外,我们进度条的每一次输出都需要使光标回车到最左侧位置,这点需要我们注意使用转义字符'\r',下面我们展示代码:

processbar.c:

#include "processbar.h"                                                                       
                                                                       
const char* lable = "|/-\\";                                                                          
char bar[NUM];  
// 这段代码显示了进度条的原理
void processbar(int speed)
{
    char bar[NUM];
    memset(bar, '\0', NUM);
    int len = strlen(lable);
    int i = 0;
    while(i <= TOP)
    {
         printf("[%-100s][%d%%][%c]\r", bar, i, lable[i%len]);
         fflush(stdout);
         bar[i++] = BODY;
         if(i < 100) bar[i] = RIGHT;
         usleep(speed);
    }
    printf("\n");
}

        这是进度条的主要函数的代码,通过上面的函数,我们可以在调用时传入进度条持续增长的速度,除了进度条的主体之外,我还在旁边添加了对应进度的百分比数字和顺时针旋转的一根杠作为修饰。最后我们输出换行防止下一命令行将我们的进度条覆盖。

processbar.h:

#pragma once                                                                                      
                                                                          
#include <stdio.h>                                                     
#include <unistd.h>                                                    
#include <string.h>                                                    
                                                                           
#define NUM 102                                                                                  
#define TOP 100                                                       
#define BODY '='                                                                         
#define RIGHT '>'                                                                                 
                                                                                                   
extern void processbar(int);

 main.c:

#include "processbar.h"  
                                                                     
int main()
{
    processbar(50000);
    return 0;
}            

        当我们得到了上述的三个文件,我们便可以编译运行在屏幕上输出想要的结果,这时我们可以使用上一篇文章中介绍的项目自动化工具——make和makefile来完成编译和清理的工作。

makefile:

processBar:processbar.c main.c
    @gcc -o $@ $^    
.PHONY:clean    
clean:    
    @rm -f processBar    

        于是我们使用make指令得到可执行文件:

[butterfly@VM-24-9-centos processbar]$ make
[butterfly@VM-24-9-centos processbar]$ ls
install.sh  main.c  Makefile  processbar  processbar.c  processbar.h

        然后我们执行得到的可执行文件:

【Linux】第一个Linux小程序——进度条,【Linux】Linux操作系统,linux,运维,centos,学习

         这样我们便运用学到的知识实现了进度条的基本原理,谢谢大家!文章来源地址https://www.toymoban.com/news/detail-538614.html

到了这里,关于【Linux】第一个Linux小程序——进度条的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 哈工大操作系统实验一--调试分析 Linux 0.00 引导程序

    1.1.1 bochs Bochs 是一个开源的 x86 模拟器和调试器,允许您在虚拟环境中模拟 x86 架构的计算机系统。Bochs 的主要用途之一是用于开发和调试操作系统内核、嵌入式系统以及其他与低级系统编程相关的任务。它提供了一种方式来模拟整个计算机系统,包括处理器、内存、设备和外

    2024年02月07日
    浏览(43)
  • 【Linux】第一个Linux小程序——进度条

            今天为大家带来一篇关于在Linux上编写的进度条小程序的博客。         我们在日常生活中使用电子产品时,经常会遇到加载的过程,这时候这些加载界面总是会附带有一些进度条,这些进度条是加载进度的可视化图形,这篇文章我们就在Linux系统下编写一个进度条

    2024年02月13日
    浏览(26)
  • 【Linux】Linux第一个小程序-进度条

    前言: 在之前的学习中,我们已经基本掌握了关于了 Linux 下的一些工具的使用,接下来我们运用之前学到的知识,我将带领大家写了一个关于 进度条 的小程序来练练手!!! 本文目录 (一)理解 r n 1、可显字符 和 控制字符 2、代码演示 (二)缓冲区的理解 1、什么是缓

    2024年02月01日
    浏览(25)
  • 【Linux】-第一个小程序(进度条)

    💖作者:小树苗渴望变成参天大树 🎉作者宣言:认真写好每一篇博客 🎊作者gitee:gitee 💞作者专栏:C语言,数据结构初阶,Linux,C++ 动态规划算法 如 果 你 喜 欢 作 者 的 文 章 ,就 给 作 者 点 点 关 注 吧! 大家好久不见,已经快一个月没有更新Linux相关的知识了,希望大家

    2024年02月12日
    浏览(26)
  • Linux第一个小程序进度条

    ​ 在写进度条程序之前我们需要介绍一下缓冲区,缓冲区有两种,输入和输出缓冲区,这里主要介绍输出缓冲区。在我们用C语言写代码时,输出一些信息,实际上是先输出到输出缓冲区里,然后才输出到我们的显示器上。 原因是: 如果输出一个字符就打印到显示器上,那么

    2024年02月05日
    浏览(26)
  • 【Linux】第一个小程序--进度条

    这篇博客要综合利用以前的知识,来实现一个进度条程序~ 目录 换行回车 缓冲区 实现简单的倒计时 实现进度条 version1 version2   在开始写这个小程序之前,我们先学习一些预备知识:  在我们运行这个程序时,并没有直接打印出“hello bit,hello world...”,而是当程序运行结束后

    2024年03月10日
    浏览(72)
  • 【Linux】编写第一个小程序:进度条

    1.1.1 sleep() 作用:让程序休眠指定秒数,如: sleep(3); //让程序休眠3秒 与 Windows 上的 Sleep() 函数不同 需要包含头文件 unistd.h 1.1.2 fflush() 作用:刷新缓冲区 需要传入一个流 需要包含头文件 stdio.h 1.1.3 usleep() 作用:让程序休眠指定微秒,如: usleep(100000); //让程序休眠100000微秒(

    2024年02月02日
    浏览(32)
  • linux第一个小程序 --- 进度条【简洁】

    结果:先输入hello world然后休眠三秒后结束 当去掉’\\\'n“ 后,结果就变成了先休眠三秒,然后打印hello world后结束。 该现象就证明了缓冲区的存在。 当缓冲区中遇到’‘n’\\\'或者缓冲区被写满后才会被打印出来,在第二张图片里面,没有n,所以hello world先被写入缓存区,然后

    2024年01月20日
    浏览(29)
  • Linux第一个小程序-进度条(c语言版)

    目录 行缓冲区概念: 行缓冲区代码演示: ​编辑进度条代码 1:memset函数: 2:const char* lable=\\\"|/-\\\\\\\";  3:usleep C语言 usleep 函数的功能和用法: 4:进度条代码的实现.c文件与.h文件: ​编辑​编辑5:运行截图 ​编辑进度条代码的实用性优化 优化1:processbar函数内部循环改为

    2024年01月15日
    浏览(38)
  • 【Linux操作系统】探秘Linux奥秘:Linux 操作系统的解密与实战

    🌈个人主页: Sarapines Programmer 🔥 系列专栏: 《操作系统实验室》 🔖诗赋清音:柳垂轻絮拂人衣,心随风舞梦飞。 山川湖海皆可涉,勇者征途逐星辉。 目录 🪐1 初识Linux OS 🪐2. Linux 操作系统的解密与实战 🌍1. 实验目的 🌍2. 实验准备 🌍3. 实验内容 🌍4. 实验心得 📝总

    2024年02月03日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包