您的位置:首页 > 运维架构 > Linux

linux下用程序实现进度条

2017-02-18 11:29 267 查看
        对于进度条大家都不陌生,在windows环境下进度条可以显示我们下载的进度,那么今天我们可以在linux环境下模仿实现进度条。

下面我先截图出我的进度条给大家看看,如下图:



     接下来我会告诉大家怎么做,可以一步一步实现进度条。

     首先,打开linux环境,ls一下 会chuxian一个code目录(ps:code目录是我自己创建的一个目录, 我把每次自己写的程序代码都会放在code目录下,这样的话方便自己查找,同时也不会污染其他的目录)。接下来在code目录下创建一个proc-dar目录:mkdir proc-dar。进入进度条目录:cd proc-bar。接下来创建一个procbar.c文件,touch procbar.c,    vim   procbar.c编辑进度条文件,在编辑界面写入如下代码:



保存退出之后,建立一个Makefile文件,touch Makefile,vim Makefile,写入如下代码:



保存退出之后,我们make一下 会出现如下界面:



那么,如果我们需要运行procbar,c文件,则只需要输入./procbar即可。

运行之后,就会出现文章一开始美美地进度条啦!!

接下来我想说一下进度条背景知识:

1.关于回车跟换行

先说这个误区,有许多人都认为回车跟换行是一回事,其实不然,回车是回车,换行是换行。

举个简单的例子,

在计算机还没有出现之前,有一种叫做电传打字机(Teletype Model 33)的玩意,每秒钟可以打10个字符。但是它有一个问题,就是打完一行换行的时候,要用去0.2秒,正好可以打两个字符。要是在这0.2秒里面,又有新的字符传过来,那么这个字符将丢失。
于是,研制人员想了个办法解决这个问题,就是在每行后面加两个表示结束的字符。一个叫做“回车”,告诉打字机把打印头定位在左边界;另一个叫做“换行”,告诉打字机把纸向下移一行。
这就是“换行”和“回车”的来历,从它们的英语名字上也可以看出一二。
后来,计算机发明了,这两个概念也就被般到了计算机上。那时,存储器很贵,一些科学家认为在每行结尾加两个字符太浪费了,加一个就可以。于是,就出现了分歧。

这便是回车跟换行的由来。所以大家千万不要搞混了。

记得在大一的时候,c语言老师说过回车跟换行:

符号    ASCII码      意义
\n        10        换行NL
\r        13        回车CR

为什么要说回车跟换行呢?

因为我们的进度条只需要回车不需要换行呀。

2.关于缓冲区fflush(stdout)

    有眼尖的小盆友都会看到我的procbar.c文件中会出现一个fflush(stdout)的代码,有好奇心的宝宝就要问了,你的这个代码是神马意思呀?

那么接下来我想跟大家解释一下关于进度条的输出流缓冲区的问题。

C语言缓冲区(缓存)详解

 缓冲区又称为缓存,它是内存空间的一部分。也就是说,在内存空间中预留了一定的存储空间,这些存储空间用来缓冲输入或输出的数据,这部分预留的空间就叫做缓冲区。缓冲区根据其对应的是输入设备还是输出设备,分为输入缓冲区和输出缓冲区。

比如我们从磁盘里取信息,我们先把读出的数据放在缓冲区,计算机再直接从缓冲区中取数据,等缓冲区的数据取完后再去磁盘中读取,这样就可以减少磁盘的读写次数,再加上计算机对缓冲区的操作大大快于对磁盘的操作,故应用缓冲区可大大提高计算机的运行速度。

又比如,我们使用打印机打印文档,由于打印机的打印速度相对较慢,我们先把文档输出到打印机相应的缓冲区,打印机再自行逐步打印,这时我们的CPU可以处理别的事情。现在您基本明白了吧,缓冲区就是一块内存区,它用在输入输出设备和CPU之间,用来缓存数据。它使得低速的输入输出设备和高速的CPU能够协调工作,避免低速的输入输出设备占用CPU,解放出CPU,使其能够高效率工作。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  linux