简单实现一个进度条并剖析原理
来源:互联网 发布:imovie for windows 编辑:程序博客网 时间:2024/05/14 15:04
1.前言
我们要实现关于一个进度条,我们的想法是采用for循环的方式,所以对于这个进度条,我们需要从下面几个问题来一一看待问题。
2.关于 ‘\n’ 与 ‘\r’
这两个符号,一个叫做回车,一个叫做换行,好多人对这两个分不清,所以我们在这里需要介绍一下。
在最早的时候,只有打字机的时候,人们在每行的后面加上两个表示结束的字符,一个叫做回车,它把打字机的光标定位在左边界,另外一个是换行,它用来换到下一行,这个就是所说的回车和换行的由来。
对于在Linux和windows当中,’\r’和’\n’的方式也是有区别。
在windows,每行的结尾是回车+换行,
在linux下,每行的结尾是换行。
Linux中遇到换行符(“\n”)会进行回车+换行的操作,回车符反而只会作为控制字符(“^M”)显示,不发生回车的操作。而windows中要回车符+换行符(“\r\n”)才会回车+换行,缺少一个控制符或者顺序不对都不能正确的另起一行。
对于这个区别,同样影响了我们在windows平台下和linux下使用fopen函数打开文本文件的时候,在我前期在一个项目,文件压缩项目中曾经遇到过这样的问题,当我们将windows按照文本的方式进行读取的时候,这个时候会把每行最后读出两个字符,一个换行一个回车。所以当时我们最终采用了二进制的方式进行读取。
清楚了这个概念,所以我们接下来进行进度条的操作时,我们只需要进行每次的’\r’,这样我们就可以每一次进行对该行的重新打印。最终,就可以实现所要求的一个进度条功能。
3.关于printf缓冲区的问题
我们通过对操作系统的学习,知道了对于我们所printf打印的内容,那么就是需要将内容首先放到内存,让后通过内存提供内容给显示器显示。但是对于操作系统来说,显示器是一个外设,速度慢,所以为了平衡,提供了一个缓冲区来进行操作,内存吧数据给了缓冲区,接下来的输出就由缓冲区进行操作了,内存就不管了。
linux下的每一个进程会维护一个print/scanf的缓冲区,对于缓冲区而言,缓冲区有一个概念叫做缓冲方式,就是说达到一定的方式,缓冲区的内容才会被刷新。
标C库函数自带缓冲区 ,常见的三种缓冲方式:
(1)行缓冲:遇到”\n”,就会刷新缓冲区
(2)全缓冲:把缓冲区写满,再进行刷新缓冲区
(3)无缓冲:系统调用函数无缓冲区(如:write)
默认情况下,一般采用行缓冲方式。
当程序退出缓冲区自动刷新,也就是一个进程结束的时候,当使用scanf也会刷新。
所以,为了每次进行打印每行的内容,我们需要采用强制刷新缓冲区,这里有一个函数fflush()。
好,接下来的打印就是轻松加愉快。
所以框架我们已经搭建好了,剩下的我们就是进行考虑写法了,为了实现整个进度条,我们模仿linux下的那种进度条,我们给一个定长数组实现。
- 简单实现一个进度条并剖析原理
- 实现一个简单的进度条
- shell实现一个简单进度条
- 智能指针原理,并实现一个简单的智能指针
- 文件上传显示进度条的原理剖析和代码实现
- 一个剖析AJAX原理的简单范例
- 一个简单的进度条,applet实现
- 用Ajax实现一个简单的进度条
- 用Ajax实现一个简单的进度条
- 简单实现一个文件上传的进度条
- linux中实现一个简单的进度条
- Linux中实现一个简单的进度条
- 用linux实现一个简单的进度条
- Linux中实现一个简单的进度条
- c++ 虚函数实现原理简单剖析
- RetargetAction实现原理简单代码剖析
- MJExtension底层实现原理简单剖析
- Linux(三):简单进度条的原理及实现
- Codeforces Round #397 D. Artsem and Saunders(构造)
- 实用的dom4j解析和生成
- masonry遇到Xib,约束异常
- android studio配置
- 2017,共享单车
- 简单实现一个进度条并剖析原理
- Android性能优化
- mysql更新字段值到另一个表
- js小功能
- java调用shell
- MyBatis传入多个参数的问题
- 项目与运营
- php实现文件上传到指定文件夹,文件路径或名字存入数据库,如何实现啊
- (一)request(请求头)