您的位置:首页 > 娱乐 > 明星 > Linux -- 进度条小程序

Linux -- 进度条小程序

2024/12/22 18:09:08 来源:https://blog.csdn.net/weixin_73359101/article/details/140992495  浏览:    关键词:Linux -- 进度条小程序

目录

一、缓冲区

二、回车与换行

三、进度条

1、版本一

2、版本二


在写小程序之前先来了解两个知识点

一、缓冲区

缓冲区(buffer),它是内存空间的一部分。也就是说在内存空间中预留了一定的存储空间,这些存储空间用来缓冲输入或者输出的数据,这部分预留的空间就叫做缓冲区,显然这种缓冲区是具有一定大小的。 

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

接下来我们用一段简单的代码看下缓冲区在代码中的作用

这段代码的结果是程序会休眠3秒,然后再打印字符串you can see me之后结束运行。

为什么会出现这种情况,不应该是打印字符串后再休眠3秒吗?

这是因为在执行printf时,字符串被写入到了C程序的缓冲区里,但并没有输出到显示器上,执行完sleep后,缓冲区的内容才被刷新到显示器上。

这就得了解下缓冲区刷新的规则:

  • 行刷新
  • 程序结束
  • 强制刷新

上面示例的情况属于程序结束时刷新,但如果在字符串后面加上'\n' 就属于行刷新

补充:

这里要介绍一个接口函数:fflush -- 强制刷新(刷新一个流)

c语言在打开时会默认打开三个流:stdin、stdout、stderr

所以如果想要显示所输入的字符串,可以使用fflush来强制刷新stdout

二、回车与换行

回车:换到当前行的开头 

换行:换到当前光标对应的下一行的位置

'\n'  -->  回车 + 换行

'\r'  -->  回车

三、进度条

1、版本一

头文件

  1 #pragma once 2 3 #include<stdio.h>4 #include<unistd.h>5 #include<string.h>6 #include<time.h>7 #include<stdlib.h>8 9 #define NUM 10310 #define Body '='11 #define Head '>'12 13 14 typedef void (*callback_t)(double);                                                                                                          15 16 //version117 void process();

源文件 

#include"processbar.h"                                                                                                                       2 3 4 const char *lable="|/-\\";5 6 //version17 void process()8 {9     //const int n = 101;10     //char buffer[n]; //C语言是编译不通过的11     12     char buffer[NUM];13     memset(buffer, '\0',sizeof(buffer));14     int cnt = 0;15     int n = strlen(lable);16     buffer[0] = Head;17     while(cnt <= 100)18     {19         printf("[%-100s][%3d%%][%c]\r", buffer, cnt, lable[cnt%n]);20         fflush(stdout);21         buffer[cnt++] = Body;22 23         if(cnt < 100)24             buffer[cnt] = Head;25 26         usleep(100000);27     }28 29     printf("\n");30 }

结果:

2、版本二

由于一个真正的进度条不是一个独立的程序,而是要依附于其他程序才能实时显示进度

但是在写程序之前,我们要讲两个知识点:回调函数和函数指针

在了解到这两个知识点后,我们就用三个文件来实现版本2的进度条

main.c:调用

processbar.c:实现

processbar.h:声明

结果:

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com