Linux实现进度条小程序

来源:互联网 发布:mac共享windows文件夹 编辑:程序博客网 时间:2024/05/16 12:05

进度条:

进度条即计算机在处理任务时,实时的,以图片形式显示处理任务的速度,完成度等剩余未完成任务量的大小,和可能需要处理时间,一般以长方形条状显示。日常生活中,下载,复制等等操作,我们都会见到进度条的身影。

     所以今天在cent os环境下的Linux实现一个简单的进度条。


那么工欲善其事必先利其器,我们先来了解一下几点基础知识。

       1.      我们想做一个怎么样的进度条?

我们做的进度条是一个方括号不动 方括号里逐渐填充#的一个进度条

 那么 我们就需要固定一个长度 向其中添加东西

我们就需要用到 printf(“[-100s%]”,buf);这里的100是规定长度但是100是从右向左输出 所以我们用到-100

     

       2.      进度条怎么处理进度增加?

这里 我们需要知道回车和换行的知识 回车和换行是不一样的

回车指的是回到一行的首部

换行指的是换到下一行

那么我们如果需要让进度条逐渐增加 我们就仅仅只需要回车这一个功能

 在C语言里回车是 /r

      3.      进度条如何缓慢显示?

毫无疑问 这里需要用(秒为单位)sleep/usleep(微秒为单位)函数

但是 当我们先打印再用usleep时 我们发现它并没有先打印 而是隔了一段时间后全部显示

所以 我们还需要了解缓冲区

缓冲区分为无缓冲、行缓冲、全缓冲。

         无缓冲:表示的是没有缓冲,可以将信息立马显现出来,典型代表是标准错误流stderr。

          行缓冲:表示的是输入输出遇到换行才执行真正的I/O操作。典型的代表是键盘的操作。

          全缓冲:表示的是输入输出写满缓冲区才执行I/O操作。典型的代表是磁盘的读写。

根据冯诺依曼思想 cpu处理完放到内存中 内存之后才会输出到输出设备上 所以我们需要刷新stdout

printf是一个行缓冲函数,先写到缓冲区,满足条件后,才将缓冲区刷到对应文件中,

                             

刷缓冲区的条件如下:

    (1)缓冲区填满;

    (2)写入的字符中有‘\n’;

    (3)调用fflush手动刷新缓冲区;

    (4)调用scanf要从缓冲区中读取数据时,也会将缓冲区内的数据刷新;

满足上面4个条件之一缓冲区就会刷新

所以我们应该用fflush函数刷新缓冲区以便让他立马显示到屏幕上


那么 我们解决完这些问题 我们就开工 开始写一个简单的进度条小程序


那么剩下的不赘述 


建loading.c 和 Makefile文件


loading.c:


Makefile :




之后我们运行并查看结果


0 0
原创粉丝点击