【Linux】Linux小程序-进度条

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

目录

        一、\r和\n的理解

        二、行缓冲区概念

        三、进度条源代码


一、\r和\n的理解

\r:回车;

\n:换行;

    那么请问这两个有什么区别呢?

    比如:我们在编写内容的时候,一行没有写完的情况下,需要换到下一行的开始位置,此时需要两个步骤:

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

    (2)在第二行让光标跳到最开始的位置,这个操作就是回车(\r)

    话不多说,我们进行下面的例子,就可以一目了然,

    <1>\n和\r都存在

 既有回车又有换行,所以执行完命令之后,光标会在下一行的开头。

 【Linux】Linux小程序-进度条

    <2> \n存在

只有换行的时候,我们运行出来和上面第一种情况相同,原因是,在C语言环境下,自动将其简化,此时的\n就表示回车加换行。

【Linux】Linux小程序-进度条

     <3>\r存在 

只有回车,我们可以想象到运行的结果是什么样,答案是:什么都不显示。为什么呢?

  • 回车之后,光标来到了文本行的开始位置,此时linux的命令行就会从光标处开始,将我们的文本覆盖掉,我们就什么也看不到。

 【Linux】Linux小程序-进度条

二、行缓冲区概念

首先先看看下面3段代码的现象: 

#include <stdio.h>
#include <unistd.h>
int main()
{
    printf("hello world!\n");
    sleep(3);
    return 0;
}

结果:直接打印出hello world!,然后停留3秒之后换行给出新的命令。  

【Linux】Linux小程序-进度条

#include <stdio.h>
#include <unistd.h>
int main()
{
    printf("hello world!");
    sleep(3);
    return 0;
}

刚开始不显示,停留3秒之后,在一行中显现hello world!和新的命令行。  

说明在刚开始运行的时候,数据被存在行缓冲区中的,3秒过后,才刷新出来。

#include <stdio.h>
#include <unistd.h>
int main()
{
    printf("hello world!");
    fflush(stdout);
    sleep(3);
    return 0;
}

 直接显现hello world!,然后停留3秒之后,在其后面直接给出新的命令行。

三、进度条源代码

(1)proc.h

#pragma once                                                                                                                     
 
#include <stdio.h>

void process();                       

(2)proc.c 

void  process()
{
  const char *lable = "|/-\\";
  char bar[SIZE];
  memset(bar,0,sizeof(bar));
  int i = 0;
  while(i<=100)
  {
    printf("\033[42;32;31m[%-100s\033[0m][%d%%][%c]\r",bar,i,lable[i%4]);
    fflush(stdout);
    bar[i++]=STYLE;
    usleep(100000);
  }
  printf("\n");
}

(3)main.c 

#include "proc.h"

int main()
{
  process();
  return 0;
}

运行结果:

【Linux】Linux小程序-进度条


 本文要是有不足的地方,欢迎大家在下面评论,我会在第一时间更正。

【Linux】Linux小程序-进度条文章来源地址https://www.toymoban.com/news/detail-459174.html

 老铁们,记着点赞加关注!!!

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

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

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

相关文章

  • Linux之缓冲区的理解

    目录 一、问题引入 二、缓冲区 1、什么是缓冲区 2、刷新策略 3、缓冲区由谁提供 4、重看问题 三、缓冲区的简单实现 我们先来看看下面的代码:我们使用了C语言接口和系统调用接口来进行文件操作。在代码的最后,我们还使用fork函数创建了一个子进程。  代码运行结果如

    2024年02月03日
    浏览(51)
  • 【Linux】深入理解文件缓冲区

    问题引入 首先看一段代码: 运行代码,结果如下: 如果此时将输出结果重定向一下: 会发现 printf 、 fwrite 都打印了两次。 究其原因,就要谈到缓冲区和缓冲区刷新策略的概念了。 如何理解缓冲区 假设你在青岛,你要从网上买一件商品,商家所在地是北京。你不会跑去北

    2024年02月11日
    浏览(57)
  • 【Linux】基础IO----理解缓冲区

    作者:დ旧言~ 座右铭:松树千年终是朽,槿花一日自为荣。 目标:理解缓冲区 毒鸡汤:有些事情,总是不明白,所以我不会坚持。早安! 专栏选自:Linux初阶 望小伙伴们点赞👍收藏✨加关注哟💕💕 缓冲区大家其实不陌生,像我们使用的 VS2019 编译器这里就有缓冲区,那它

    2024年04月13日
    浏览(47)
  • 【linux基础I/O(二)】文件系统讲解以及文件缓冲区的概念

    💓博主CSDN主页:杭电码农-NEO💓   ⏩专栏分类:Linux从入门到精通⏪   🚚代码仓库:NEO的学习日记🚚   🌹关注我🫵带你学更多操作系统知识   🔝🔝 对于文件来讲,有打开的在内存中 的文件,也有没有打开的在磁盘上 文件,上一篇文章讲解的是前者,本篇 文章将带大家了解后

    2024年01月19日
    浏览(57)
  • Linux文件系列: 深入理解缓冲区和C标准库的简单模拟实现

    至此,我们理解了缓冲区的概念和作用,下面我们来简易模拟实现一下C标准库 我们要实现的是: 1.文件结构体的定义 1.首先要有一个文件结构体: 刷新策略分别宏定义为 2.myfopen等等函数的声明 path:文件路径+文件名 mode:打开文件的方式 “r”:只读 “w”:覆盖写 “a”:追加写 strea

    2024年03月11日
    浏览(69)
  • [Linux]理解文件系统!动静态库详细制作使用!(缓冲区、inode、软硬链接、动静态库)

            hello,大家好,这里是bang___bang_,今天来谈谈的文件系统知识,包含有缓冲区、inode、软硬链接、动静态库。本篇旨在分享记录知识,如有需要,希望能有所帮助。 目录 1️⃣缓冲区 🍙缓冲区的意义 🍙常见缓冲区刷新策略 🍙缓冲区位置猜想 🍥现象猜测 🍥现象解

    2024年02月13日
    浏览(50)
  • 【看表情包学Linux】文件描述符 | 重定向 Redirection | dup2 函数 | 缓冲区的理解 (Cache)

       🤣  爆笑 教程  👉 《看表情包学Linux》👈   猛戳订阅     🔥 💭 写在前面: 在上一章中,我们已经把 fd 的基本原理搞清楚了。本章我们将开始探索 fd 的应用特征,探索 文件描述符的分配原则。讲解重定向,上一章是如何使用 fflush 把内容变出来的,介绍 dup2 函数,

    2023年04月25日
    浏览(58)
  • 理解缓冲区

    对于这样的代码,首先可以肯定的是 printf 语句先于 sleep 执行,既然如此那么就应该是先打印语句然后进行休眠,下面看看结果: 但这里却是先休眠以后再打印语句,这是因为存在一个叫缓冲区的东西,当我们要向外设写入数据(让显示器显示就是向显示器写入数据)时会将

    2023年04月25日
    浏览(73)
  • 【Linux】文件缓冲区

    提到文件缓冲区这个概念我们好像并不陌生,但是我们对于这个概念好像又是模糊的存在脑海中,之间我们在介绍c语言文件操作已经简单的提过这个概念,今天我们不妨深入理解什么是文件缓冲区 通过自己实现库中的一些文件操作函数更加深入的理解文件缓冲区 自定义实现

    2024年02月10日
    浏览(59)
  • 【linux】重定向+缓冲区

    自我名言 : 只有努力,才能追逐梦想,只有努力,才不会欺骗自己。 喜欢的点赞,收藏,关注一下把! close(1),为什么没有打印新建文件fd呢? printf(“%dn”,fd); printf会把内容打印到stdout文件中。 但是close(1)关闭标准输出stdout—显示器,int fd=open();新打开的文件fd是1。 st

    2024年02月08日
    浏览(57)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包