在Linux中实现一个进度条程序
来源:互联网 发布:unity3d meshrenderer 编辑:程序博客网 时间:2024/05/18 09:29
在日常生活中,我们遇见过各种各样的进度条,那么我们今天就来编写一个进度条的代码吧!
在编写之前我们先要了解几个背景知识:
1、了解在Linux环境下的sleep函数
(1) sleep函数是让程序睡眠的
(2)函数名为sleep(),其函数原型为:
unsigned int sleep(unsigned int seconds); 参数为毫秒 (如果需要更精确可以用usleep,单位为微秒)
1微秒=10^(-6)毫秒
(3) 使用sleep函数要加头文件
#include <unistd.h>
了解上述知识我们再来看两份代码:
程序运行结果:先输出you are so cute!再停顿3秒
程序运行结果:先停顿3秒再输出you are so cute!
那这是为什么呢?这两份代码唯一的不同就是printf函数中一份代码有‘\n’,一份没有。
在程序中printf函数一定是先于sleep函数运行的,那为什么第二个程序得结果是先停顿再打印内容的呢?这里其实是有关缓冲区的内容的。
printf函数是自带缓冲区的,且按行刷新的。在执行printf函数的过程中,并不是将结果直接输出到屏幕中,而是将结果保存在缓冲区,按行刷新。于是第一个程序在遇到‘\n’时,缓冲区刷新将you are so cute!打印出来。
2、fflush函数
fflush: 清除读写缓冲区,需要立即把输出缓冲区的数据进行物理写入时。我们的进度条程序需要的是一个字符一个字符的输出,这样防止了输出进度条的时候出现一段一段字符输出的情况
有了以上背景知识我们就先来看看我们实现进度条的具体代码吧!
1 #include<stdio.h> 2 #include<unistd.h> 3 4 int main() 5 { 6 int i = 0; 7 char bar [102];//为了将'\0'放入,故数组长度应为102. 8 bar[0]=0;//先输出一个空串 9 const char *lable="|/-\\";//由于\是特殊字符需要转义,所以要输入两个\ //lable是为了实现等待进度的图案(类似你经常在等待进度时看见的小圈圈) 10 while(i<=100) 11 { 12 printf("[%-100s][%d%%][%c]\r",bar,i,lable[i%4]);//i%4是为了让四个字符依次循环输入,这样就可以让图案转起来了呢 13 fflush(stdout); 14 bar[i]='#'; 15 i++; 16 bar[i]='\0'; 17 usleep(100000);//0.1s刷新一次,整个进度条完成只需要10 秒哦,你也可以自己调整时间 18 } 19 printf("\n"); 20 return 0; 21 22 23 }
这就是我们的进度条代码了,在Linux中你首先要创建一个proc_bar的目录,在目录中先创建一个proc_bar.c的文件,在文件中写入以上代码(如图所示)
接着保存退出,运行此程序就可以成功实现一个进度条,结果如下图
细心的朋友们肯定发现我在运行的时候怎么不是 ./proc_bar.c而是./proc_bar呢,其实啊我是写了一个简单的makefile(如图所示,具体怎么写请移步我的上一篇博客哦),有了Makefile我们的程序就更加自动化了呢。
好啦!以上就是我们一个基本的进度条程序!你学会了嘛?
- 在Linux中实现一个进度条程序
- 在Linux下实现进度条程序
- linux中实现一个简单的进度条
- Linux中实现一个简单的进度条
- Linux中实现一个简单的进度条
- 【Linux】Linux下实现一个简单的进度条程序
- 在Linux下编写一个进度条的小程序
- 在Linux下用C语言写一个小程序实现一个进度条编写Makefile来进行运行
- 用Linux编写程序,实现一个简易的进度条
- Linux 中实现进度条
- VC技巧:在程序的状态栏中实现进度条
- VC技巧:在程序的状态栏中实现进度条
- VC技巧 在程序的状态栏中实现进度条
- VC技巧 在程序的状态栏中实现进度条
- Linux实现进度条小程序
- Linux下实现一个进度条
- linux下实现一个进度条
- linux c 实现一个进度条
- vmware装unbuntu系统
- 投影矩阵与最小二乘(三)
- 基于阿里云上实现全站https
- context:component-scan和context:annotation-config的区别
- java 判断单链表是否有环
- 在Linux中实现一个进度条程序
- iOS开发Archive报错Build Failed不显示打包界面
- mysql数据导入到hive遇到的问题
- [大型网站优化技术] -- 减少HTTP请求之合并图片详解
- 非线程安全问题
- Tomcat启动过程原理详解
- react handleClick
- Storyboard里面的几种Segue区别及视图的切换:push,modal,popover,replace和custom
- 3.Django入门:教程-模型