【Linux】进度条小程序の深度解剖(7)

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

​​​​​【Linux】进度条小程序の深度解剖(7),YY滴 《Linux系列》,linux,vim,运维

前言

大家好吖,欢迎来到 YY 滴 Linux系列 ,热烈欢迎! 本章主要内容面向接触过Linux的老铁,主要内容含
【Linux】进度条小程序の深度解剖(7),YY滴 《Linux系列》,linux,vim,运维

欢迎订阅 YY滴Linux专栏!更多干货持续更新!以下是传送门!

订阅专栏阅读: YY的《Linux》系列 ❀❀❀❀❀
【Linux】Linux环境搭建(新手指南,购买,登录)(1)
【Linux】Linux基本指令大全-[详解](2)
【Linux】Linuxの权限与权限基本问题-[详解](3)
【Linux】基础开发工具—[yum]&[vim]详解(4)
【Linux】gcc&g++与 [ 动静态库 ] 的美妙邂逅(5)
【Linux】自动化构建工具-make/Makefile详解(6)
【Linux】进度条小程序の深度解剖(7)
【Linux】从软硬件角度重新理解 [ 操作系统与冯诺依曼体系 ](8)
【Linux】程序员一定要了解的计算机管理理念——描述与组织(9)
【Linux】操作系统管理的算珠——进程の详解(10)

欢迎订阅 YY滴C++专栏!更多干货持续更新!以下是传送门!

  • YY的《C++》专栏
  • YY的《C++11》专栏
  • YY的《Linux》专栏
  • YY的《数据结构》专栏
  • YY的《C语言基础》专栏
  • YY的《初学者易错点》专栏
  • YY的《小小知识点》专栏

一.在Linux中的设置

  • 用vim分别建立【main.c】【makefile】【processbar】【processBar.c】【processbar.h】,可视具体情况设置,文末有简略代码;
  • makefile文件如图所示
    【Linux】进度条小程序の深度解剖(7),YY滴 《Linux系列》,linux,vim,运维> - ./processbar 执行程序

细节:为什么在makefile中不用包含头文件?

  • 头文件就在源代码的当前目录下,编译器会自动去找到头文件

二.必备概念梳理

1.回车与换行的区别

  • 回车:光标回到当前行的左端
  • 换行:跳转到当前的下一行
  • PS:现在我们键盘上的ENTER同时兼备了回车和换行的功能
  • 在C语言中"\n"表示回车加换行,"\r"单单指的是回车;

2.缓冲区概念

引入: 缓冲区是C语言维护的一段内存

  • C语言会默认打开三个输入输出的文件,分别是标准输入流stdin,标准输出流stdout,标准错误stderr

  • 在进度条小程序中,我们要特别注意标准输出流stdout
    【Linux】进度条小程序の深度解剖(7),YY滴 《Linux系列》,linux,vim,运维

一.“\n”和“\r”在缓冲区中的作用效果差别

  • 众所周知,在Linux中,显示器可以被当作一个文件;
  • 而且显示器默认是行刷新,也就是当输出内容配上“\n”后会直接回车+换行并立刻将内容打印在屏幕上,待睡眠结束后,才会弹出操作框;
  • 而当输出内容配上“\r”后,其会先输出到缓冲区中,待睡眠结束后才会和操作框一起输出
#include <stdio.h>
int main()
{
 printf("hello Makefile!\n");先行打印,待睡眠结束后才弹出操作框
 sleep(3);
 return 0;
 
 printf("hello Makefile!\r");待睡眠结束后才会和操作框一起打印
}

二.fflush函数

  • fflush是一个在C语言标准输入输出库中的函数,功能是冲洗流中的信息,该函数通常用于处理磁盘文件。fflush()会强迫将缓冲区内的数据写回参数stream 指定的文件中。
  • 在下面代码块中,"hello Makefile!"本来应该待睡眠结束后才会和操作框一起弹出,在此之前存储在缓冲区中;但我们用了fflush(stdout);(stdout是其数据类型),直接将内容从缓冲区中写回显示器文件中;
  • 最终完成的效果是:先行打印,待睡眠结束后才弹出操作框
#include <stdio.h>
int main()
{
 printf("hello Makefile!\r");
 fflush(stdout);
 sleep(3);
 return 0;
}

三.fflush函数的应用:倒计时功能

1.倒计时功能的实现原理
  • 利用不断的回车刷新实现
2.数据类型的表示细节
  • 显示2位数的数字 printf(“%2d\r”,cnt);
  • 此时功能正常【10,9,8…1,0】
  • 左对齐 printf(“%-2d\r”,cnt);
3.倒计时功能完整代码
#include <stdio.h>
#include <unistd.h>
int main()
{
  int cnt=10;倒计时功能
  while(cnt>=0)
  {
    printf("%d\r",cnt);              此时屏幕出现【109080...1000】,功能异常;
    fflush(stdout);
    cut--;
    sleep(1);
  }
  return 0;
}

三.设计进度条的各个部分

1.设计进度条主体部分

1.打印时为进度条预留空间
  • 设计一个字符数组,并初始化;此时其为一个空串
memset(bar, 0 ,sizeof(bar));
2.调整进度条主体加载方向
  • 在Linux环境下, 行默认是右对齐;所以随着不断的回车与换行,进度条呈现出来的效果是自右向左移动;
  • 我们只需要改为 [%-100s] 即可
 printf("[%-100s]\r", bar);
3.进度条主体部分代码
#include <unistd.h>
int main()
{
  int i = 0;
  
  char bar[102];
  memset(bar, 0 ,sizeof(bar));
  
  while(i <= 100 )
 {
   printf("[%-100s]\r", bar);
   fflush(stdout);
   bar[i++] = '#';
   usleep(10000);
 }
}

2.设计百分号进度部分

一.设计细节:“%如何表示”
  • 细节:由于【 % +''字母为 数据类型】,斜杠【%】用【%%】表示
二.实现原理
  • while循环
int main()
{
 int i = 0;
 while(i <= 100 )
 {
 printf("[%d%%]",i);
 fflush(stdout);
 }
 return 0;
}

3.设计旋转光标部分

一.设计细节:“\ 如何表示”
  • 细节:由于【 \ +''为 转义字符】,斜杠【\】用【\\】表示
二.实现原理
  • 常量字符串配合上【 i++% 4】
  • 【 -r 回车】 +【 fflush刷新图标】; 下一轮while循环,直接覆盖原来的字符,实现光标转动;
int main()
{
  int i = 0;
  const char *lable="|/-\\";
  while(i <= 100 )
  {
    printf("[%c]\r",lable[i++%4]);
    fflush(stdout);
  }
}

四.进度条完整代码

#include <unistd.h>
#include <string.h>
int main()
{
  int i = 0;
  char bar[102];
  memset(bar, 0 ,sizeof(bar));
  const char *lable="|/-\\";
  while(i <= 100 )
 {
   printf("[%-100s][%d%%][%c]\r", bar, i, lable[i%4]);
   fflush(stdout);
   bar[i++] = '#';
   usleep(10000);
 }
  printf("\n");
  return 0;
}

文章来源地址https://www.toymoban.com/news/detail-740274.html

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

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

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

相关文章

  • 【Linux】实现进度条小程序

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

    2024年03月22日
    浏览(38)
  • 『Linux升级路』进度条小程序

    🔥 博客主页: 小王又困了 📚 系列专栏: Linux 🌟 人之为学,不日近则日退 ❤️ 感谢大家点赞👍收藏⭐评论✍️ 目录 一、预备知识 📒1.1缓冲区 📒1.2回车和换行 二、倒计时 📒2.1源代码 📒2.2注意事项 三、进度条 📒3.1源代码 📒3.2实际应用 我们先观察两段代码的现象

    2024年02月05日
    浏览(30)
  • 【Linux旅行记】进度条小程序

    最近,我发现了一个超级强大的人工智能学习网站。它以通俗易懂的方式呈现复杂的概念,而且内容风趣幽默。我觉得它对大家可能会有所帮助,所以我在此分享。点击这里跳转到网站。 🎉博客主页:小智_x0___0x_ 🎉欢迎关注:👍点赞🙌收藏✍️留言 🎉系列专栏:Linux入门

    2024年02月14日
    浏览(27)
  • 【Linux取经路】进度条小程序

    2024年02月14日
    浏览(30)
  • 【Linux】make/Makefile & 进度条小程序

    目录 一,认识 make/makefile 二,实例代码 1,依赖关系 2,原理 3,项目清理 4,测试讲解 三,Linux第一个小程序-进度条 game.h game.c test.c 程序详解   会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力 一个工程中的源文件不计数,其按类型、功能、模块分

    2024年02月05日
    浏览(26)
  • 【Linux】从0到1实现一个进度条小程序

    个人主页:🍝在肯德基吃麻辣烫 我的gitee:gitee仓库 分享一句喜欢的话:热烈的火焰,冰封在最沉默的火山深处 进度条实现: 本文讲解如何从0到1实现一个进度条小程序。 我们在写作文的时候,写到了一行的结尾,就得另起一行并到开头继续写。 其中,这个另起一行的动作

    2024年02月14日
    浏览(35)
  • [Linux]手把手教你制作进度条小程序

    C语言中字符分为两种: 可显字符 控制字符 其中可显字符就是字符a这类的字符,控制字符就是n这种控制字符。 对于我们制作进度条,我们只需要关注两个控制字符: r – 进行回车操作 n – 进行换行加回车操作 说明: n本身是换行字符,但是C语言本身将其解析成了换行加回

    2024年02月14日
    浏览(36)
  • 【Linux从入门到精通】C语言模拟实现进度条小程序

        在Linux下,我们安装软件时会经常看到进度条,来告知我们安装的进度。我们不妨自己模拟实现一个进度条,看看其中的细节。模拟实现进度条并不困难,但其中的细节我们又不可忽视。 本篇文章会对模拟实现进度条进行详解 。 文章目录 一、进度条整体模板 二、输出缓

    2024年02月03日
    浏览(28)
  • Linux实现进度条小程序(包含基础版本和模拟下载过程版本)

    usleep这个函数的参数是微秒数,作用是让程序休眠对应的微秒数 1秒=1000毫秒 1毫秒=1000微秒 1微妙=1000纳秒 等等等等 因此下面的代码中的 usleep(1000000)=1秒 1.缓冲区 1.缓冲区概念的引出 首先,先让大家看两份代码,分析一下为什么出现这种情况? 请注意:这个代码的运行情况是:先打印

    2024年02月05日
    浏览(34)
  • 手把手教你如何在Linux下写进度条小程序(附源码)

    录屏2023 进入ProgressBar这个目录之后,使用ls命令查看是否创建成功 编写makefile文件是为了,使用make命令构建我们的.c文件,生成可执行程序 把源码复制粘贴到我们对应的文件中 使用vim指令先打开头文件 按小写i,进入插入模式(Insert),直接拷贝上去 再按esc,直接输入:wq(

    2024年02月04日
    浏览(32)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包