java 实现linux进度条,Linux实现的进度条一(基本知识学习和简单功能)
Linux下经常下载或者升级的时候会有一个进度条,今天学习了下,整理了个笔记,一来为了加深记忆巩固知识,二来方便日后查阅。当然也希望和大家共同学习,一起进步。
废话不多说,上效果图:
代码:
#include #include #include #define PROGRESS_BAR_CNT 100
int progress_bar()
{
int i;
char buf[PROGRESS_BAR_CNT + 1] = {0};
for(i = 0; i < PROGRESS_BAR_CNT; i++)
{
buf[i] = '#';
printf("[%-100s]:%d%%\r",buf,i + 1);
fflush(stdout);
usleep(1000*30);
}
printf("\n");
}
int main()
{
progress_bar();
return 0;
}
总结:
1. \r 是回车,即光标会移动到该行的行首,如果该行有内容的话,重新写入多少数据就会覆盖掉多少原来的内容。
2. \n是换行,但在Linux下,准确来说是换行加回车。即光标移动带改行行首并且移动到下一行。
3. 缓冲的问题。printf即使刷新的几种方式,详情见下面的扩展知识。
扩展阅读:
1.、\r \n的使用和区别
详情参考(如有侵权,请联系删除):https://blog.csdn.net/qq_40395278/article/details/81199281
回车(\r)、换行(\n)的区别
他们间的区别其实是个回车换行的问题
先来段历史
回车”(Carriage Return)和“换行”(Line Feed)这两个概念的来历和区别。
符号 ASCII码 意义
\n 10 换行
\r 13 回车CR
在计算机还没有出现之前,有一种叫做电传打字机(Teletype Model 33,Linux/Unix下的tty概念也来自于此)的玩意,每秒钟可以打10个字符。但是它有一个问题,就是打完一行换行的时候,要用去0.2秒,正好可以打两个字符。要是在这0.2秒里面,又有新的字符传过来,那么这个字符将丢失。
于是,研制人员想了个办法解决这个问题,就是在每行后面加两个表示结束的字符。一个叫做“回车”,告诉打字机把打印头定位在左边界;另一个叫做“换行”,告诉打字机把纸向下移一行。这就是“换行”和“回车”的来历,从它们的英语名字上也可以看出一二。
后来,计算机发明了,这两个概念也就被般到了计算机上。那时,存储器很贵,一些科学家认为在每行结尾加两个字符太浪费了,加一个就可以。于是,就出现了分歧。
在Windows中:
'\r' 回车,回到当前行的行首,而不会换到下一行,如果接着输出的话,本行以前的内容会被逐一覆盖;
'\n' 换行,换到当前位置的下一行,而不会回到行首;
Unix系统里,每行结尾只有“”,即"\n";Windows系统里面,每行结尾是“”,即“\r\n”;Mac系统里,每行结尾是“”,即"\r";。一个直接后果是,Unix/Mac系统下的文件在Windows里打开的话,所有文字会变成一行;而Windows里的文件在Unix/Mac下打开的话,在每行的结尾可能会多出一个^M符号。
例:
$ echo -en '12\n34\r56\n\r78\r\n' > tmp.txt
分别在Windws和Linux中查看此文件可知:
Linux中遇到换行符("\n")会进行回车+换行的操作,回车符反而只会作为控制字符("^M")显示,不发生回车的操作。而windows中要回车符+换行符("\r\n")才会回车+换行,缺少一个控制符或者顺序不对都不能正确的另起一行。
2.printf函数的缓冲
详情参考(如有侵权,请联系删除):https://blog.51cto.com/10810196/1786171
printf是一个行缓冲函数,先写到缓冲区,满足条件后,才将缓冲区刷到对应文件中,刷缓冲区的条件如下:
1 缓冲区填满
2 写入的字符中有‘\n’ '\r'
3 调用fflush手动刷新缓冲区
4 调用scanf要从缓冲区中读取数据时,也会将缓冲区内的数据刷新
满足上面4个条件之一缓冲区就会刷新,,也就是printf会真正调用write来写入
当我们执行printf的进程或者线程结束的时候会主动调用flush来刷新缓冲区,所以程序结束,也会刷新。
输出结果:
在程序运行时因为加入了延时,输出结果并不是一个一个字符输出,而是一次输出1024个字符,从而证明行缓冲区大小为1024个字节。
java 实现linux进度条,Linux实现的进度条一(基本知识学习和简单功能)相关推荐
- Java基础知识学习:简单随手记录(3)
学习视频链接:https://www.bilibili.com/video/BV1fh411y7R8?p=1&vd_source=1635a55d1012e0ef6688b3652cefcdf ...
- Java基础知识学习:简单随手记录(1)
学习视频链接:https://www.bilibili.com/video/BV1fh411y7R8?p=1&vd_source=1635a55d1012e0ef6688b3652cefcdf ...
- [附源码]Java计算机毕业设计SSM古诗词知识学习系统
项目运行 环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclis ...
- eclipse linux 代码提示,Linux Eclipse代码提示功能设置(Java C/C++)
最近在Linux下开发,由于长期使用Visual Studio 2010,对代码提示功能情有独钟,现在在Linux下,使用Eclipse做开发,当然免不了怀念Visual Studio强悍的代码提示, ...
- Java工程打包部署到linux服务器整个过程
本次分享是Java工程打包部署到linux服务器整个过程,包括在服务器上jar包启停的一些经验分享. 操作环境 下面是对已经完成的Java工程打包上传,启停步骤分享. 1.在项目工程中使用Maven的 ...
- Java开发中常用的Linux命令
Linux学习笔记 1,简单说明 2,Linux基本常用命令 2.1,目录管理 2.1.1,列出目录(ls) 2.1.2,切换目录(cd) 2.1.3,创建目录(mkdir) 2.1.4,删除目录(r ...
- linux命令显示进度,【命令】Linux下查看dd命令写入进度
[命令]Linux下查看dd命令写入进度 12个月前 (05-14) 作者:Jiaozn 分类:Linux 阅读次数:433 评论(0) Linux下有一个强力工具,dd,用来操作镜 ...
- linux 的vi命令中将当前文件另存为新文件a.log,【转】20条Linux命令面试问答
问:1 如何查看当前的Linux服务器的运行级别? 答: 'who -r' 和 'runlevel' 命令可以用来查看当前的Linux服务器的运行级别. 问:2 如何查看Linux的默认网关? 答: ...
- java 进度条 不更新_java 进度条不能刷新解决方案 (已更新一次)
java期末考试都考完了,实验课却还没完,课程设计也还没开始做,本来打算把最后两次实验尽快做完,然后好好做课设,(我早就想写的坦克大战,过几天写好了,也肯定要整理发布出来).可却被多线程一题给坑了,题 ...
- Linux学习总结(9)——Linux 新手必知必会的 10 条 Linux 基本命令
Linux 对我们的生活产生了巨大的冲击.至少你的安卓手机使用的就是 Linux 核心.尽管如此,在第一次开始使用 Linux 时你还是会感到难以下手.因为在 Linux 中,通常需要使用终端命令来取 ...
最新文章
- 无人驾驶技术排名:百度居中游,苹果特斯拉垫底 | 行业
- github php面试题,GitHub - johnsong261510/php_interviews: PHP 面试题汇总、剑指 Offer PHP 代码实现版本...
- spring核心文件配置头
- 在Linux 下配置PHP 支援GD
- 二叉树的序列化和反序列化
- openwrt无盘服务器,搭建基于 OpenWrt/gPXE/iSCSI 的 Windows 无盘工作站
- Trie树(字典树)详细知识点及其应用
- 【Python】Magician“专属”神秘的“读心术”
- 从底部上滑失灵_iPad 上这 20 个快捷操作,真正帮你提高生产力!
- OLTP和OLAP是什么
- 锁屏界面_强迫症必爱!iPhone怎样隐藏锁屏界面的手电筒、相机图标?
- SAP HR人力资源管理
- 牛腩新闻发布系统(7)——总结
- mt6735通用recovery_mt6735刷机包下载
- UnionPay-银联支付-netcore(一)
- 【noi.ac】#283. 唐时月夜
- 安卓手机刷linux超频内核,内核超频教程
- php首字母改大写,php实现字符串首字母转换成大写的方法
- 虚幻引擎(24)-2D动画序列
- 活动并发测试-1000个不同用户同时并发请求报名笔记
热门文章
- 京东开源组件库NutUI 3.1 正式发布:开启多端开发之路
- 关于win10自带邮箱绑定163邮箱的设置
- EfficientDet介绍
- Layui 表格分页控件
- java pgm_(转) PGM图像处理方法详解(很好一篇)
- 全手工杂拌面——韩国才有的中华料理 冬至餐桌上的25道家常手工主食
- Cell Ranger count (gene expression) 输出文件解读
- RedHat/CentOS 服务器 SSH 密钥交换实验(实现SSH密钥认证)
- Machine Learning A-Z学习笔记16-Thompson抽样算法
- Ios 公司申请苹果账号