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实现的进度条一(基本知识学习和简单功能)相关推荐

  1. Java基础知识学习:简单随手记录(3)

    学习视频链接:https://www.bilibili.com/video/BV1fh411y7R8?p=1&vd_source=1635a55d1012e0ef6688b3652cefcdf ...

  2. Java基础知识学习:简单随手记录(1)

    学习视频链接:https://www.bilibili.com/video/BV1fh411y7R8?p=1&vd_source=1635a55d1012e0ef6688b3652cefcdf ...

  3. [附源码]Java计算机毕业设计SSM古诗词知识学习系统

    项目运行 环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclis ...

  4. eclipse linux 代码提示,Linux Eclipse代码提示功能设置(Java C/C++)

    最近在Linux下开发,由于长期使用Visual Studio 2010,对代码提示功能情有独钟,现在在Linux下,使用Eclipse做开发,当然免不了怀念Visual Studio强悍的代码提示, ...

  5. Java工程打包部署到linux服务器整个过程

    本次分享是Java工程打包部署到linux服务器整个过程,包括在服务器上jar包启停的一些经验分享. 操作环境 下面是对已经完成的Java工程打包上传,启停步骤分享. 1.在项目工程中使用Maven的 ...

  6. Java开发中常用的Linux命令

    Linux学习笔记 1,简单说明 2,Linux基本常用命令 2.1,目录管理 2.1.1,列出目录(ls) 2.1.2,切换目录(cd) 2.1.3,创建目录(mkdir) 2.1.4,删除目录(r ...

  7. linux命令显示进度,【命令】Linux下查看dd命令写入进度

    [命令]Linux下查看dd命令写入进度 12个月前 (05-14)    作者:Jiaozn    分类:Linux    阅读次数:433 评论(0) Linux下有一个强力工具,dd,用来操作镜 ...

  8. linux 的vi命令中将当前文件另存为新文件a.log,【转】20条Linux命令面试问答

    问:1 如何查看当前的Linux服务器的运行级别? 答: 'who -r' 和 'runlevel' 命令可以用来查看当前的Linux服务器的运行级别. 问:2 如何查看Linux的默认网关? 答: ...

  9. java 进度条 不更新_java 进度条不能刷新解决方案 (已更新一次)

    java期末考试都考完了,实验课却还没完,课程设计也还没开始做,本来打算把最后两次实验尽快做完,然后好好做课设,(我早就想写的坦克大战,过几天写好了,也肯定要整理发布出来).可却被多线程一题给坑了,题 ...

  10. Linux学习总结(9)——Linux 新手必知必会的 10 条 Linux 基本命令

    Linux 对我们的生活产生了巨大的冲击.至少你的安卓手机使用的就是 Linux 核心.尽管如此,在第一次开始使用 Linux 时你还是会感到难以下手.因为在 Linux 中,通常需要使用终端命令来取 ...

最新文章

  1. 无人驾驶技术排名:百度居中游,苹果特斯拉垫底 | 行业
  2. github php面试题,GitHub - johnsong261510/php_interviews: PHP 面试题汇总、剑指 Offer PHP 代码实现版本...
  3. spring核心文件配置头
  4. 在Linux 下配置PHP 支援GD
  5. 二叉树的序列化和反序列化
  6. openwrt无盘服务器,搭建基于 OpenWrt/gPXE/iSCSI 的 Windows 无盘工作站
  7. Trie树(字典树)详细知识点及其应用
  8. 【Python】Magician“专属”神秘的“读心术”
  9. 从底部上滑失灵_iPad 上这 20 个快捷操作,真正帮你提高生产力!
  10. OLTP和OLAP是什么
  11. 锁屏界面_强迫症必爱!iPhone怎样隐藏锁屏界面的手电筒、相机图标?
  12. SAP HR人力资源管理
  13. 牛腩新闻发布系统(7)——总结
  14. mt6735通用recovery_mt6735刷机包下载
  15. UnionPay-银联支付-netcore(一)
  16. 【noi.ac】#283. 唐时月夜
  17. 安卓手机刷linux超频内核,内核超频教程
  18. php首字母改大写,php实现字符串首字母转换成大写的方法
  19. 虚幻引擎(24)-2D动画序列
  20. 活动并发测试-1000个不同用户同时并发请求报名笔记

热门文章

  1. 京东开源组件库NutUI 3.1 正式发布:开启多端开发之路
  2. 关于win10自带邮箱绑定163邮箱的设置
  3. EfficientDet介绍
  4. Layui 表格分页控件
  5. java pgm_(转) PGM图像处理方法详解(很好一篇)
  6. 全手工杂拌面——韩国才有的中华料理 冬至餐桌上的25道家常手工主食
  7. Cell Ranger count (gene expression) 输出文件解读
  8. RedHat/CentOS 服务器 SSH 密钥交换实验(实现SSH密钥认证)
  9. Machine Learning A-Z学习笔记16-Thompson抽样算法
  10. Ios 公司申请苹果账号