Linux基础实现一个简单的进度条

Posted Ricky_0528

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux基础实现一个简单的进度条相关的知识,希望对你有一定的参考价值。

文章目录

一、预备知识

  • 换行和回车的区别
    • \\r:回车,回到当前行的行首,而不会换到下一行,如果接着输出的话,本行以前的内容会被逐一覆盖,如果之前的内容比下一次来的的内容长,就不会被完全覆盖
    • \\n:换行,换到当前位置的下一行,而不会回到行首
#include <stdio.h>
#include <unistd.h>

int main()

    //printf("hello\\n");
    printf("hello");

    sleep(5);

    return 0;

  • printf已经执行,但是数据没有被立即刷新到显示器中,没有遇到\\n字符串会暂时保存在用户C语言级别的缓冲区,然后再由缓冲区刷新到显示器中,如果一直未遇到就直到程序结束才会被刷新出来

    显示器设备刷新策略就是行刷新,即遇到\\n即进行刷新

    C程序默认会打开三个输入输出流:

    stdin,stdout,stderr

    键盘 显示器 显示器

    可以使用头文件 unistd.h 下的 fflush 来刷新输出缓冲区 stdout

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

int main()

    //printf("hello\\n");
    printf("hello");

	fflush(stdout); //刷新输出缓冲区

    sleep(5);

    return 0;

二、简单的倒计时

#include <stdio.h>
#include <unistd.h>
int main()

    int count = 20;
    while (count)
    
        printf("%2d\\r", count); //因为一共是两个字符,所以需要预留出两个字符的位置
        fflush(stdout);
        count--;
        sleep(1);
    
    return 0;

三、实现

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

#define NUM 100

int main()

    char bar[NUM + 1];
    memset(bar, '\\0', sizeof(bar));

    const char* label = "|/-\\\\";

    int i = 0;
    while (i <= NUM)
    
        printf("[%-100s][%3d%%] %c\\r", bar, i, label[i % 4]);
        fflush(stdout);
        bar[i] = '#';
        usleep(50000);

        i++;
    
    printf("\\n");

    return 0;

以上是关于Linux基础实现一个简单的进度条的主要内容,如果未能解决你的问题,请参考以下文章

Linux中实现一个简单的进度条

Linux小练习进度条程序

Linux下进度条的简单实现

Linux简单实现进度条

Android自定义View实现可拖拽的进度条

js 代码实现视频进度条点到哪个位置就播放那个位置的视频。进度条是用css样式另做的。