linux下实现进度条小程序
来源:互联网 发布:数据炼金 编辑:程序博客网 时间:2024/05/17 06:21
转载自:实现一个简单的进度条
我们平常总会在下载东西或者安装软件的时候看到进度条,这里我们就在linux下实现这个进度条的功能。
1、我们使用的关键打印语句是printf函数:
printf("[%-100s] [%d]%% [%c]\r");
其中,’-‘表示左对齐 100表示列宽,’\r’表示回车,即每
次打印完使光标回到行首。这样在打印的时候就不会出现打印很多行的情况。
在这里需要解释一下’\r’和’\n’这两个概念:
回车:’\r’,表示回到当前行的行首
换行:’\n’,表示光标进入下一行
2、加入睡眠时间,否则结果一下子就全部打印出来了,就不是进度条了。
通过man指令我们可以找到sleep和usleep函数。前面延时单位为秒,后置延时单位为微秒,我们这里选择后者。
3、手动刷新缓冲区
现在来看一下UNIX里面关于标准IO的几种缓冲机制:
<1>全缓冲:指的是系统在填满标准IO缓冲区之后,才进行实际的IO操作
;磁盘上的文件通常由标准IO库实施全缓冲
<2>行缓冲:标准IO在输入输出时遇到换行符(\n)的时候才将缓冲区的内容
写入到标准输入输出的磁盘文件。注意:当流涉及到终端时
通常使用的是行缓冲
<3>无缓冲:指的是标准IO库不对字符进行缓冲存储,
注意:标准出错流stderr通常是无缓冲。
printf函数是一个行缓冲的函数,它会将结果先写到缓冲区,然后满足一定的条件才会刷新到对应的文件中,所以我们看到打印出来的结果是一段一段的,而不是一个一个字符的打印出来,这就是因为行缓冲的原因。
那么我们就有必要使得每打印一个字符刷新到对应的文件中,怎么做呢?
首先我们看下有哪些条件可以刷新缓冲区:
(1)缓冲区已满;
(2)遇到\n;
(3)调用ffush手动刷新缓冲区;
(4)调用scanf()从缓冲区读取数据时,也会将缓冲区的数据刷新;
这里我们使用fflush来手动刷新缓冲区。
代码如下:
#include <stdio.h>#include <unistd.h>#include <string.h>int main(){ int rate = 0; char buf[101] = {0}; const char arr[4] = {'-', '\\', '|', '/'}; // 注意:'\'字符的表示 while( rate <= 100 ) { buf[rate] = '#'; printf("[%-100s] [%d]%% [%c]\r", buf, rate, arr[rate%4]); fflush(stdout); rate++; usleep(100000); } return 0;}
效果图如下:
- Linux下实现进度条小程序
- linux下实现进度条小程序
- Linux下进度条小程序
- Linux实现进度条小程序
- Linux下的进度条小程序
- Linux下编写进度条小程序
- Linux下的小程序:进度条
- Linux下的进度条小程序
- linux下用程序实现进度条
- 在Linux下实现进度条程序
- 【Linux】彩色进度条的实现,Linux小程序
- Linux下的第一个小程序之进度条
- linux下的一个小程序--模拟进度条
- 在Linux下编写一个进度条的小程序
- unbuntu 下进度条小程序
- Linux之小程序进度条
- Linux入门:进度条小程序
- Linux简单小程序---进度条
- C语言:求一个数组中只出现一次的两个数
- J2EE13规范
- android AlertDialog的简单使用
- CXF架构
- linux tail 命令详解
- linux下实现进度条小程序
- [00103]用Shell通配符匹配字符串
- shiro.ehcache.xml配置参数
- sql website注入 渗透测试
- MFC 按钮上贴png图片 边框为透明的
- Java WeakHashMap
- C++创建dll文件及使用方法
- UML系列图——静态图(对象图 Object和包图 Package)
- Git教程学习(八)—使用GitHub