Linux小程序之进度条

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

 > 作者简介:დ旧言~,目前大二,现在学习Java,c,c++,Python等
> 座右铭:松树千年终是朽,槿花一日自为荣。

> 目标:自己能实现进度条

> 毒鸡汤:

> 望小伙伴们点赞👍收藏✨加关注哟💕💕 

Linux小程序之进度条,Linux初阶,linux

🌟前言

        咱们学习这么久的指令,一句话来概括,都忘光咯,学个锤锤😟😟😟,感觉白学了,博主也是感同身受,毕竟没有相应的练习,很容易遗忘,咱们只要记住主要的指令就可以了,忘了或者不熟咱就查查文档。今天捏我们用我们所学的知识编写一个进度条,看看下面:

QQ录屏20231129162350

Linux小程序之进度条,Linux初阶,linux

 ⭐前景知识一:\r和\n的理解

        C语言会提供一些特殊的字符,比如说我们常用的\n,这个字符大家都不陌生,不就是换行嘛,这个我懂,但是还有一个字符\r,这个字符的作用是回车的意思。在这块就有人说不都是一个意思嘛🤔,敲敲这些老铁们的头🙈,当然不可能是一个意思。

🌙理解字符含意

\r(回车):

  • 就是在第二行让光标跳到最开始的位置,这个操作就是回车。

\n(换行):

  • 让光标从第一行跳到第二行,但是光标只是垂直向下跳,并没有在第二行的开始。这个操作就是换行。

直接说字符的意思就有一点抽象,咱们来个代码看看👻👻👻

🌙代码理解字符

\n(换行):代码

#include<stdio.h>

int main()
{
   printf("hello world\n");

   return 0;

}

Linux小程序之进度条,Linux初阶,linux

\r(回车):代码

#include<stdio.h>

int main()
{
   printf("hello world\r");

   return 0;

}

Linux小程序之进度条,Linux初阶,linux

基于上面的原因我这不讲解,在后面的缓冲区里面我们详细讲解。

 ⭐前景知识二:认识缓冲区

这里我们要知道什么是缓冲区,咱可以看看官方用语:缓冲区处理 - Windows drivers | Microsoft Learn

简单来讲就是:

  • 在内存中预留了一块空间,用来缓冲输入或输出的数据,这个保留的空间被称为缓冲区。

🌙回顾回车和换行

咱们再看看这两张图片:

Linux小程序之进度条,Linux初阶,linux

Linux小程序之进度条,Linux初阶,linux

我们知道用 \n 的话就可以打印出来,而 \r,不能打印出来。

  • 由于显示器模式是行刷新缓冲区是按行缓冲的,没有\n,就不能立即刷新。
  • 由于\r 回到行首后,会进行覆盖写,shell 提示符会覆盖掉之前写的 “hello world”。

🌙sleep和ffush理解

        使用这个函数是在<unistd.h>库中,使用它们需要包含头文件 #include <unistd.h>,这里和缓冲区有什么关系🧐,因为在进度条中需要用到这两函数。

咱们先看这些个函数的作用

  • sleep:休眠函数,单位是秒。
  • usleep:休眠函数,单位是ms(10﹣6 )
  • fflush:刷新缓冲区

咱们来个简单的代码看看这些函数作用:

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

int main()
{
   printf("hello world\r"); 
   //刷新缓冲区
   fflush(stdout);
   printf("\n");
   //休眠三秒
   sleep(3);
   return 0;

}

Linux小程序之进度条,Linux初阶,linux

 ⭐前景知识三:简单倒计时

实现进度条咱们得先实现一下简单的倒计时,为了给进度条铺垫,简单来讲就是当炮灰。

Linux小程序之进度条,Linux初阶,linux

效果演绎:

全部代码:

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

int main()
{
   int cnt = 10;
   while(cnt >= 0)
   {
       printf("%-2d\r",cnt);
       fflush(stdout);
       sleep(1);
       cnt--;
   }
   printf("\n");
   return 0;
}

过程分析:

  • 定义倒计时变量 cnt,让其逐渐递降。
  • 核心就是用 \r 回到缓冲区行首进行覆盖写,然后fflush不断刷新出出来。
  • 格式调整,打印 cnt==10 时,在缓冲区打印的其实是字符1和字符0,如果我们不用 2d% 来调整格式,而用 d% 的话,那么覆盖写只会覆盖第一位字符 1 11 的位置,而第二位的字符 0 00, 还留在缓冲区原来的位置,于是倒计时便会变为下面这样
      10->90->80->70->60->50->40->30->20->10->00 ,-2d% 加个负号保证其向左对齐
  • 倒计时完加个 \n符,shell 提示符就不会出现在倒计时后面。

 ⭐进度条过程分析

原理:其原理就是不断地覆盖,然后将其像早以前的动画片一样,变成一个动画。

  • 第一个中括号就是表示进度条。
  • 第二个中括号表示进度。
  • 第三个表示旋转样式。

QQ录屏20231129162350

game.h

#include<stdio.h>
#include<time.h>
#include<unistd.h>
 
void game(double rate);
void download();

game.c

#include"game.h"
#define MAX 1024*1024*1024
 
char* buff = "|/-\\";
int i = 0;
char arr[102] = { 0 };
void game(double rate)
{
	if (rate <= 1.0)
	{
		arr[0] = '=';
	}
	printf("[%-100s][%.1lf%%][%c]\r", arr, rate, buff[i % 4]);
	fflush(stdout);
	arr[(int)rate] = '=';
	if (rate< 99.0)
	{
		arr[(int)rate+1] = '>';
	}
	i++;
}
 
void download()
{
	srand(time(NULL)^1023);
	int max = MAX;
	int cnt = 0;
	double rate = 0;
	while (rate<100.0)
	{
		cnt+= rand() % (1024*1024);
		rate = ((cnt*1.0)/max)* 100;
		if (rate > 100)
		{
			rate = 100;
		}
		game(rate);
		usleep(50000);
	}
}

test.c

​
#include"game.h"
 
int main()
{
	download();
	return 0;
}

​

makefile

all:test.o game.o
	gcc -o $@ $^

test.o:test.c
	gcc -c -o $@ $^

game.o:game.c
	gcc -c -o $@ $^

.PHONY:clean
clean:
	rm -rf *.o all

​

  🌟结束语

       今天内容就到这里啦,时间过得很快,大家沉下心来好好学习,会有一定的收获的,大家多多坚持,嘻嘻,成功路上注定孤独,因为坚持的人不多。那请大家举起自己的小说手给博主一键三连,有你们的支持是我最大的动力💞💞💞,回见。

Linux小程序之进度条,Linux初阶,linux文章来源地址https://www.toymoban.com/news/detail-752160.html

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

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

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

相关文章

  • Linux小程序--进度条

    目录 1.知识补充 1.1回车和换行  1.2缓冲区 2.实现倒计时  3.实现进度条  1.在制作小程序进度条之前,我们先了解一下,回车换行和行缓冲区的概念。 2.动态效果,在同一个位置刷新不同的图像,实现一个倒计时的效果。 3.有了上面的基础我们就可以实现进度条了 所以说回车

    2024年02月21日
    浏览(27)
  • 【Linux系统编程】Linux第一个小程序——进度条

    这篇文章我们一起来完成我们Linux中的第一个小程序——进度条 在C语言中,字符可以分为可显字符(printable characters)和控制字符(control characters)。 可显字符是指可以在屏幕或打印输出上显示的字符,它们包括数字、字母、标点符号、符号等。可显字符可以直接被用户看到

    2024年02月16日
    浏览(38)
  • Linux进度条小程序

    在学习C语言的时候,我们输出的时候,通常会使用 n ,进行换行输出。其实这的所谓的 换行 ,包含了2个操作: 回车、换行 。 回车的本意是将光标回车到当前行的最前面,在C语言中 r 表示回车。 这就是回车的现象,这里按理说最后应该会输出到0停止,然后将0显式到终端

    2024年02月13日
    浏览(37)
  • Linux新手小程序——进度条

    目录 前言 需要先了解        1. r 和 n                           2. 缓冲区         学习c语言时,我们可以粗略把字符分为 可显字符 和 控制字符 .         在按回车换到下一行开始的操作时,实际上是进行了两个操作: 1. 让光标跳到下一行(只是垂直向下,这

    2024年02月15日
    浏览(28)
  • Linux小程序之进度条

      作者简介:დ旧言~,目前大二,现在学习Java,c,c++,Python等 座右铭:松树千年终是朽,槿花一日自为荣。 目标:自己能实现进度条 毒鸡汤: 望小伙伴们点赞👍收藏✨加关注哟💕💕          咱们学习这么久的指令,一句话来概括,都忘光咯,学个锤锤😟😟😟,

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

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

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

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

    2024年03月10日
    浏览(88)
  • 【Linux】-第一个小程序(进度条)

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

    2024年02月12日
    浏览(34)
  • 【Linux】实现进度条小程序

    个人主页 : zxctscl 如有转载请先通知 在之前已经了解了 【Linux】vim的使用和 【Linux】编译器-gcc/g++使用还有 【Linux】自动化构建工具-make/Makefile,有了这些工具,这次来实现一个进度条小程序。 换行:是换到新的一行。 回车:是回到最开始。 举个例子:在格子里面写字的时

    2024年03月22日
    浏览(46)
  • 【LInux】简单进度条程序的编写

    在进行进度条的程序的编写之前,还有几个问题需要解决。 第一个问题,先来看两段代码: 对比上面两段代码只有一个 n 的区别。 左边的代码很简单,就是先打印,然后停顿 3 秒,程序退出。 主要问题是,右边的代码,也实先打印,然后停顿 3 秒,程序退出吗? 答案显然

    2024年02月12日
    浏览(38)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包