Linux 浅谈代码打印到终端的缓冲区(进度条程序)
我们知道printf是向终端显示打印数据,是我们想要看到程序的结果,而在linux系统下一切皆文件,在终端显示是要有显示器设备的,在linux下把显示器设备当做文件进行操作,将数据写入到显示器设备文件,数据才会被显示在显示器上。显示器文件在编程中被称为:标准输出设备(标准输入,标准输出,标准错误)。
当我们每次打印数据时其实并不是直接将数据输出到标准输出设备中,而是想想数据拷贝到缓冲区,当缓冲区数据满时或者程序结束(程序结束缓冲区数据全部释放)或者手动刷新缓冲区时,缓冲区才会把数据输出到标准输出设备中。这样子做的好处是减少IO设备的操作。如果没有缓冲区,每次打印数据时都会进行IO操作,会降低IO效率。有了缓冲区,就不同每次打印都进行IO操作,而是等到缓冲区达到一定条件时才会进行IO操作,而且缓冲区的速度是非常快的,这样子减少IO操作可以提高IO效率。
每个文件都有自己的缓冲区,标准输出文件的缓冲区有个特性:换行刷新缓冲区
刷新缓冲区就是把缓冲区的所有数据都写入到标准输出设备中。
在C语言中有手动刷新缓冲区的代码:fflush(stdout)
\r
和\n
的区别:\r
是回车符–光标移动到起始位置 \n
是换行符–光标移动到下一行
进度条程序完整代码:
#include <stdio.h>
#include <unistd.h>int main()
{int i = 0;char buf[21] = { 0 };for (i = 0; i < 20; ++i){buf[i] = '-';printf("%s\r", buf);usleep(100000); //让程序间隔执行fflush(stdout); //刷新缓冲区} return 0;
}
Linux 浅谈代码打印到终端的缓冲区(进度条程序)相关推荐
- 浅谈代码的执行效率(4):汇编优化
终于谈到这个话题了,首先声明我不是汇编优化的高手,甚至于我知道的所有关于汇编优化的内容,仅仅来自于学校的课程.书本及当年做过的一些简单练习.换句话说,我了解的东西只能算是一些原则,甚至也有一些&quo ...
- html打印进度条不显示,LODOP打印URL显示和隐藏进度条
不建议使用ADD_PRINT_URL: 由于Lodop借用IE下载引擎,与非IE浏览器之间目前不能传递Session(Cookies),所以需要安全验证的页面不要用URL方式打印,要用页面已经下载好的 ...
- linux编译项目的命令,Linux用make指令编译进度条程序
本文实例为大家分享了Linux下写一个简单进度条的具体代码,供大家参考,具体内容如下 首先建立一个新的文件,touch progress_bar.c 执行该vim progress_bar.c命令,写 ...
- Linux下基本工具及彩色进度条程序
1.vim配置 Vim是从 vi 发展出来的一个功能强大.高度可定制的文本编辑器.代码补全.编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用,和Emacs并列成为类Unix系统用户最喜欢的 ...
- linux mv 递归拷贝,奇技淫巧 - 给Linux中的cp和mv命令中添加进度条的高级拷贝
GNU cp和GNU mv命令用于在GNU/Linux操作系统中复制和移动文件和目录.这两个命令缺少的一个特性是它们不显示任何进度条.如果复制一个大文件或目录,您就不知道完成复制过程需要多长时间,也不 ...
- 给Linux中的cp和mv命令中添加进度条的高级拷贝
GNU cp和GNU mv命令用于在GNU/Linux操作系统中复制和移动文件和目录.这两个命令缺少的一个特性是它们不显示任何进度条.如果复制一个大文件或目录,您就不知道完成复制过程需要多长时间,也不 ...
- 详解在Linux下实现(彩色)进度条程序,并通过makefile进行编译.
彩色进度条的实现与makefile编译: 创建一个process文件,在里面编写实现进度条的代码 1.在编写代码的时候我们首先要区分两个转义字符:\n \r \n:表示换行,换到下一行,并位于起 ...
- Linux 基于QT的mplayer视频播放器(实现进度条的拖动、播放列表等)
UI随手做的,有点简陋 先放效果图: 功能:实现了音量的进度条,播放进度条,播放暂停,停止,快进快退等等,并且界面可以跟随窗口缩放.(进度条可拖动控制视频.音频) 下面界面视频的功能: 1.播放 用m ...
- 进度条程序详解(Linux)
话不多说,先贴源码,后面是讲解 #include <stdio.h> #include <string.h> #include <unistd.h>int main ...
最新文章
- IE兼容问题IE6,IE7,IE8,IE9,IE10
- string.Equals 比较2个字符串是否相同忽略大小写
- 算法导论5:基数排序和计数排序 2016.1.5
- python事件循环_简单了解一下事件循环(Event Loop)
- 在程序员面前千万不要说这9句话,我一个同事就死的很惨!
- IDEA中运行springboot+vue项目设置terminal路径
- 《Cortex-M0权威指南》之体系结构---栈空间操作
- 如何成为一名真正专业的程序员
- Java(TM) Platform SE binary已停止工作
- 如何进行Monkey Test
- 灰色马尔科夫模型matlab实现
- Python实现身份证号码合法性校验
- XP系统访问网页无法下载php,window_WinXP因配额不足导致无法访问如何解决, WindowsXP系统虽然说是已经 - phpStudy...
- springcloudAlibaba+dubbo线程拥堵Thread pool is EXHAUSTED
- 运维宝典:常用运维命令合集服务器配置、防火墙配置
- 绿幕换背景、绿幕视频实时换背景
- 计算机桌面有去不掉的框,电脑右下角有个白色方框去不掉
- The server time zone value ‘�й���ʱ��’ is unrecognized or represents more than one time zone. You mu
- python文件的两种类型是什么意思_Python文件处理里encoding和encode有事区别,bytes类型是什么意思?...
- java 终端窗口是什么,java程序如何打开命令行窗口?java程序怎么运行?
热门文章
- qt 二次开发 研华daq_研华DAQ数据采集卡编程
- c语言求未知坐标,求助,有关坐标计算的
- selenium autoit java_selenium借助AutoIt识别上传文件Java篇
- rabbitmq集群部署及配置
- 如何设置谷歌浏览器在新窗口中打开搜索链接
- 基于JAVA+SpringMVC+MYSQL的网上选课系统
- mv强制覆盖 shell_生产力工具:shell 与 Bash 脚本
- 每日一算法 ---- 冒泡排序
- 转载:(C++)浅谈多态基类析构函数声明为虚函数
- Linux下使用Nginx端口转发出现502错误的一种解决办法