linux下实现进度条小程序
转载自:实现一个简单的进度条
我们平常总会在下载东西或者安装软件的时候看到进度条,这里我们就在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下实现进度条小程序的更多相关文章
- Winfrom 简单的进度条小程序
使用Winform空间编写简单的进度条小程序: 所需控件:Lable 标签 TextBox 文本框 progressBar 进度条控件 timer 定时器 下面是源码及效果图: /// &l ...
- Linux下简单C语言小程序的反汇编分析
韩洋原创作品转载请注明出处<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 写在开始,本文为因为参加MOO ...
- Linux下简易进度条的实现
在生活中,进度条是很常见的,那么,进度条是如何实现的呢? 首先,进度条的动态是利用人眼视觉暂留效果的.实际上是如下过程: 先输出:[= ...
- Python实现进度条小程序
一.print()参数介绍 1.end:指定打印结束后添加的字符,默认值为换行符 for j in range(3): print('hello world') for i in range(3): ...
- Linux下提权常用小命令
有些新手朋友在拿到一个webshell后如果看到服务器是Linux或Unix操作系统的就直接放弃提权,认为Linux或Unix下的提权很难,不是大家能做的,其实Linux下的提权并没有很多人想象的那么 ...
- Linux下使用vim编辑C程序
这几天在系统能力班自学linux,加上最近大数据课上开始使用linux,我在这里总结一下,linux下使用vim编辑c程序的一些问题. 大数据课上是直接使用micro来编辑的,我这里只是简单的说明一下 ...
- 如何用javac 和java 编译运行整个Java工程 (转载)【转】在Linux下编译与执行Java程序
如何用javac 和java 编译运行整个Java工程 (转载) http://blog.csdn.net/huagong_adu/article/details/6929817 [转]在Linux ...
- linux 下检查java jar包 程序是否正常 shell
linux 下检查java jar包 程序是否正常 shell http://injavawetrust.iteye.com BATCH_SERVER="batch.jar" NR ...
- Linux下如何让jar包程序在后台一直执行
Linux下如何让Jar包程序在后台一直执行 shell命令 nohup java -jar xxx.jar & &:让程序后台执行. nohub:让程序控制台输出转移到nohub.o ...
随机推荐
- 20169207《Linux内核原理与分析》第九周作业
第九周的实验依旧和往常的一样,主要包括两部分.一是1.阅读学习教材「Linux内核设计与实现 (Linux Kernel Development)」第教材第13,14章.二是学习MOOC「Linux内 ...
- 移动端 - Android客户端性能测试常见指标
rom版本的性能测试 一般关注功耗(不过 rom 版本的功耗测试跟应用的功耗测试会有所差异,当然只是用例设计方面的差异,工具仍然采用安捷伦电源仪进行) 应用的性能测试 包括很多测试项,如启动时间.内存 ...
- MySQL性能优化之延迟关联
[背景] 某业务数据库load 报警异常,cpu usr 达到30-40 ,居高不下.使用工具查看数据库正在执行的sql ,排在前面的大部分是: SELECT id, cu_id, name, in ...
- Apache Flink 漫谈系列
阿里云讲Flink的,还是蛮不错 https://yq.aliyun.com/articles/666043?spm=a2c4e.11153940.blogcont679659.23.9fae56e7 ...
- Bloom Filter 算法简介 (增加 Counting Bloom Filter 内容)
Bloom Filter的中文翻译叫做布隆过滤器,是1970年由布隆提出的.它实际上是一个很长的二进制向量和一系列随机映射函数.布隆过滤器可以用于检索一个元素是否在一个集合中.它的优点是空间效率和查询 ...
- bootstrap4.2 导航搜索框
<!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>& ...
- Ajax登录用户名密码
<script src="http://code.jquery.com/jquery-latest.js"></script>#引入jQuery#当点击函数 ...
- Java学习--基本数据类型的定义和运算2
例1 public class OperateDemo01{ public static void main(String args[]){ int num = 22 ; System.out.pri ...
- cxgrid回车移到下一个单元格
cxgrid回车移到下一个单元格 cxgrid回车移到下一个单元格 作用:表格式录入全键盘操作. 设置cxgrid1Dbtableview1.optionsBehavior.goToNextCel ...
- [LintCode] Permutations
http://www.lintcode.com/en/problem/permutations/# Given a list of numbers, return all possible permu ...