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

linux下实现简单进度条

2017-04-04 15:23 183 查看
想要实现进度条我们得先搞清楚缓冲机制,那么什么是缓冲机制呢?

我们首先看俩段代码:





ps:

函数名: Sleep

功 能: 执行挂起一段时间

用 法:
void Sleep(DWORD dwMilliseconds);


在gcc编译器中,使用的头文件为:

#include <unistd.h>


Sleep()单位为毫秒,sleep()单位为秒(如果需要更精确可以用usleep单位为微秒)

返回值:

若进程/线程挂起到参数所指定的时间则返回0,若有信号中断则返回剩余秒数。

那么这两段代码有什么区别呢?

我们看到在第二个printf里面少了一个\n,这会产生什么不同的结果呢?



首先我们明确printf在sleep前面,必定是先实现printf再实现sleep

1:第一段代码先在屏幕上输出hello bit!然后停三秒换行!

2:第二段代码是停三秒再在屏幕上输出hello bit!然后没有换行!

那么第二段代码为什么停顿三秒才打印出来的呢?printf明明在sleep前面执行的啊。

下面我们来解开疑惑:

1:什么是缓冲机制

为了提高文件系统性能,内核利用一部分物理内存分配出缓冲区,用于缓存系统操作和数据文件,当内核收到读写的请求时,内核先去缓存区找是否有请求的数据,有就直接返回,如果没有则通过驱动程序直接操作磁盘。

2:缓存机制优点:减少系统调用次数,降低CPU上下文切换和磁盘访问频率。

3:因为printf函数存在行缓冲机制,先把数据放入缓冲区然后再显示到屏幕上,如果在里面加上\n的话就会立即输出到屏幕上(即立即执行停3秒换行),在第二个代码中没有\n所以先把数据放到缓冲区中再让printf停3秒执行,而且并不换行。

理解了缓冲机制我们就来实现简单的进度条吧:



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  linux 编译器